Пример #1
0
function block_mystats_mycourses()
{
    global $USER;
    $mycourses = array();
    $count = 0;
    $enrolledcourses = enrol_get_users_courses($USER->id);
    foreach ($enrolledcourses as $course) {
        if (isset($USER->lastcourseaccess[$course->id])) {
            $course->lastaccess = $USER->lastcourseaccess[$course->id];
        } else {
            $course->lastaccess = 0;
        }
        $mycourses[$course->id] = $course;
        $count++;
    }
    if (is_enabled_auth('mnet')) {
        $remotecourses = get_my_remotecourses();
        foreach ($remotecourses as $course) {
            $mycourses[$course->id] = $course;
            $count++;
        }
    }
    return $mycourses;
}
 function get_remote_courses()
 {
     global $CFG, $USER, $OUTPUT;
     if (!is_enabled_auth('mnet')) {
         // no need to query anything remote related
         return;
     }
     $icon = '<img src="' . $OUTPUT->pix_url('i/mnethost') . '" class="icon" alt="" />';
     // shortcut - the rest is only for logged in users!
     if (!isloggedin() || isguestuser()) {
         return false;
     }
     if ($courses = get_my_remotecourses()) {
         $this->content->items[] = get_string('remotecourses', 'mnet');
         $this->content->icons[] = '';
         foreach ($courses as $course) {
             $coursecontext = context_course::instance($course->id);
             $this->content->items[] = "<a title=\"" . format_string($course->shortname, true, array('context' => $coursecontext)) . "\" " . "href=\"{$CFG->wwwroot}/auth/mnet/jump.php?hostid={$course->hostid}&amp;wantsurl=/course/view.php?id={$course->remoteid}\">" . $icon . format_string(get_course_display_name_for_list($course)) . "</a>";
         }
         // if we listed courses, we are done
         return true;
     }
     if ($hosts = get_my_remotehosts()) {
         $this->content->items[] = get_string('remotehosts', 'mnet');
         $this->content->icons[] = '';
         foreach ($USER->mnet_foreign_host_array as $somehost) {
             $this->content->items[] = $somehost['count'] . get_string('courseson', 'mnet') . '<a title="' . $somehost['name'] . '" href="' . $somehost['url'] . '">' . $icon . $somehost['name'] . '</a>';
         }
         // if we listed hosts, done
         return true;
     }
     return false;
 }
Пример #3
0
/**
 * Prints custom user information on the home page.
 * Over time this can include all sorts of information
 */
function print_my_moodle()
{
    global $USER, $CFG, $DB, $OUTPUT;
    if (!isloggedin() or isguestuser()) {
        print_error('nopermissions', '', '', 'See My Moodle');
    }
    $courses = enrol_get_my_courses('summary', 'visible DESC,sortorder ASC');
    $rhosts = array();
    $rcourses = array();
    if (!empty($CFG->mnet_dispatcher_mode) && $CFG->mnet_dispatcher_mode === 'strict') {
        $rcourses = get_my_remotecourses($USER->id);
        $rhosts = get_my_remotehosts();
    }
    if (!empty($courses) || !empty($rcourses) || !empty($rhosts)) {
        if (!empty($courses)) {
            echo '<ul class="unlist">';
            foreach ($courses as $course) {
                if ($course->id == SITEID) {
                    continue;
                }
                echo '<li>';
                print_course($course);
                echo "</li>\n";
            }
            echo "</ul>\n";
        }
        // MNET
        if (!empty($rcourses)) {
            // at the IDP, we know of all the remote courses
            foreach ($rcourses as $course) {
                print_remote_course($course, "100%");
            }
        } elseif (!empty($rhosts)) {
            // non-IDP, we know of all the remote servers, but not courses
            foreach ($rhosts as $host) {
                print_remote_host($host, "100%");
            }
        }
        unset($course);
        unset($host);
        if ($DB->count_records("course") > count($courses) + 1) {
            // Some courses not being displayed
            echo "<table width=\"100%\"><tr><td align=\"center\">";
            print_course_search("", false, "short");
            echo "</td><td align=\"center\">";
            echo $OUTPUT->single_button("{$CFG->wwwroot}/course/index.php", get_string("fulllistofcourses"), "get");
            echo "</td></tr></table>\n";
        }
    } else {
        if ($DB->count_records("course_categories") > 1) {
            echo $OUTPUT->box_start("categorybox");
            print_whole_category_list();
            echo $OUTPUT->box_end();
        } else {
            print_courses(0);
        }
    }
}
Пример #4
0
 /**
  * Returns HTML to print list of courses user is enrolled to for the frontpage
  *
  * Also lists remote courses or remote hosts if MNET authorisation is used
  *
  * @return string
  */
 public function frontpage_my_courses()
 {
     global $USER, $CFG, $DB;
     if (!isloggedin() or isguestuser()) {
         return '';
     }
     $output = '';
     if (!empty($CFG->navsortmycoursessort)) {
         // sort courses the same as in navigation menu
         $sortorder = 'visible DESC,' . $CFG->navsortmycoursessort . ' ASC';
     } else {
         $sortorder = 'visible DESC,sortorder ASC';
     }
     $courses = enrol_get_my_courses('summary, summaryformat', $sortorder);
     $rhosts = array();
     $rcourses = array();
     if (!empty($CFG->mnet_dispatcher_mode) && $CFG->mnet_dispatcher_mode === 'strict') {
         $rcourses = get_my_remotecourses($USER->id);
         $rhosts = get_my_remotehosts();
     }
     if (!empty($courses) || !empty($rcourses) || !empty($rhosts)) {
         $chelper = new coursecat_helper();
         if (count($courses) > $CFG->frontpagecourselimit) {
             // There are more enrolled courses than we can display, display link to 'My courses'.
             $totalcount = count($courses);
             $courses = array_slice($courses, 0, $CFG->frontpagecourselimit, true);
             $chelper->set_courses_display_options(array('viewmoreurl' => new moodle_url('/my/'), 'viewmoretext' => new lang_string('mycourses')));
         } else {
             // All enrolled courses are displayed, display link to 'All courses' if there are more courses in system.
             $chelper->set_courses_display_options(array('viewmoreurl' => new moodle_url('/course/index.php'), 'viewmoretext' => new lang_string('fulllistofcourses')));
             $totalcount = $DB->count_records('course') - 1;
         }
         $chelper->set_show_courses(self::COURSECAT_SHOW_COURSES_EXPANDED)->set_attributes(array('class' => 'frontpage-course-list-enrolled'));
         $output .= $this->coursecat_courses($chelper, $courses, $totalcount);
         // MNET
         if (!empty($rcourses)) {
             // at the IDP, we know of all the remote courses
             $output .= html_writer::start_tag('div', array('class' => 'courses'));
             foreach ($rcourses as $course) {
                 $output .= $this->frontpage_remote_course($course);
             }
             $output .= html_writer::end_tag('div');
             // .courses
         } elseif (!empty($rhosts)) {
             // non-IDP, we know of all the remote servers, but not courses
             $output .= html_writer::start_tag('div', array('class' => 'courses'));
             foreach ($rhosts as $host) {
                 $output .= $this->frontpage_remote_host($host);
             }
             $output .= html_writer::end_tag('div');
             // .courses
         }
     }
     return $output;
 }
Пример #5
0
 function get_remote_courses()
 {
     global $THEME, $CFG, $USER;
     $icon = '<img src="' . $CFG->pixpath . '/i/mnethost.gif" class="icon" alt="' . get_string('course') . '" />';
     // only for logged in users!
     if (!isloggedin() || isguest()) {
         return false;
     }
     if ($courses = get_my_remotecourses()) {
         $this->content->items[] = get_string('remotecourses', 'mnet');
         $this->content->icons[] = '';
         foreach ($courses as $course) {
             $this->content->items[] = "<a title=\"" . format_string($course->shortname) . "\" " . "href=\"{$CFG->wwwroot}/auth/mnet/jump.php?hostid={$course->hostid}&amp;wantsurl=/course/view.php?id={$course->remoteid}\">" . format_string($course->fullname) . "</a>";
             $this->content->icons[] = $icon;
         }
         // if we listed courses, we are done
         return true;
     }
     if ($hosts = get_my_remotehosts()) {
         $this->content->items[] = get_string('remotemoodles', 'mnet');
         $this->content->icons[] = '';
         foreach ($USER->mnet_foreign_host_array as $somehost) {
             $this->content->items[] = $somehost['count'] . get_string('courseson', 'mnet') . '<a title="' . $somehost['name'] . '" href="' . $somehost['url'] . '">' . $somehost['name'] . '</a>';
             $this->content->icons[] = $icon;
         }
         // if we listed hosts, done
         return true;
     }
     return false;
 }
Пример #6
0
function print_my_moodle()
{
    /// Prints custom user information on the home page.
    /// Over time this can include all sorts of information
    global $USER, $CFG;
    if (empty($USER->id)) {
        error("It shouldn't be possible to see My Moodle without being logged in.");
    }
    $courses = get_my_courses($USER->id, 'visible DESC,sortorder ASC', array('summary'));
    $rhosts = array();
    $rcourses = array();
    if (!empty($CFG->mnet_dispatcher_mode) && $CFG->mnet_dispatcher_mode === 'strict') {
        $rcourses = get_my_remotecourses($USER->id);
        $rhosts = get_my_remotehosts();
    }
    if (!empty($courses) || !empty($rcourses) || !empty($rhosts)) {
        if (!empty($courses)) {
            echo '<ul class="unlist">';
            foreach ($courses as $course) {
                if ($course->id == SITEID) {
                    continue;
                }
                echo '<li>';
                print_course($course);
                echo "</li>\n";
            }
            echo "</ul>\n";
        }
        // MNET
        if (!empty($rcourses)) {
            // at the IDP, we know of all the remote courses
            foreach ($rcourses as $course) {
                print_remote_course($course, "100%");
            }
        } elseif (!empty($rhosts)) {
            // non-IDP, we know of all the remote servers, but not courses
            foreach ($rhosts as $host) {
                print_remote_host($host, "100%");
            }
        }
        unset($course);
        unset($host);
        if (count_records("course") > count($courses) + 1) {
            // Some courses not being displayed
            echo "<table width=\"100%\"><tr><td align=\"center\">";
            print_course_search("", false, "short");
            echo "</td><td align=\"center\">";
            print_single_button("{$CFG->wwwroot}/course/index.php", NULL, get_string("fulllistofcourses"), "get");
            echo "</td></tr></table>\n";
        }
    } else {
        if (count_records("course_categories") > 1) {
            print_simple_box_start("center", "100%", "#FFFFFF", 5, "categorybox");
            print_whole_category_list();
            print_simple_box_end();
        } else {
            print_courses(0);
        }
    }
}
Пример #7
0
/**
 * Return sorted list of user courses
 *
 * @return array list of sorted courses and count of courses.
 */
function block_course_overview_get_sorted_courses()
{
    global $USER;
    $limit = block_course_overview_get_max_user_courses();
    $courses = enrol_get_my_courses('id, shortname, fullname, modinfo, sectioncache');
    $site = get_site();
    if (array_key_exists($site->id, $courses)) {
        unset($courses[$site->id]);
    }
    foreach ($courses as $c) {
        if (isset($USER->lastcourseaccess[$c->id])) {
            $courses[$c->id]->lastaccess = $USER->lastcourseaccess[$c->id];
        } else {
            $courses[$c->id]->lastaccess = 0;
        }
    }
    // Get remote courses.
    $remotecourses = array();
    if (is_enabled_auth('mnet')) {
        $remotecourses = get_my_remotecourses();
    }
    // Remote courses will have -ve remoteid as key, so it can be differentiated from normal courses
    foreach ($remotecourses as $id => $val) {
        $remoteid = $val->remoteid * -1;
        $val->id = $remoteid;
        $courses[$remoteid] = $val;
    }
    $order = array();
    if (!is_null($usersortorder = get_user_preferences('course_overview_course_order'))) {
        $order = unserialize($usersortorder);
    }
    $sortedcourses = array();
    $counter = 0;
    // Get courses in sort order into list.
    foreach ($order as $key => $cid) {
        if ($counter >= $limit && $limit != 0) {
            break;
        }
        // Make sure user is still enroled.
        if (isset($courses[$cid])) {
            $sortedcourses[$cid] = $courses[$cid];
            $counter++;
        }
    }
    // Append unsorted courses if limit allows
    foreach ($courses as $c) {
        if ($limit != 0 && $counter >= $limit) {
            break;
        }
        if (!in_array($c->id, $order)) {
            $sortedcourses[$c->id] = $c;
            $counter++;
        }
    }
    // From list extract site courses for overview
    $sitecourses = array();
    foreach ($sortedcourses as $key => $course) {
        if ($course->id > 0) {
            $sitecourses[$key] = $course;
        }
    }
    return array($sortedcourses, $sitecourses, count($courses));
}
Пример #8
0
 /**
  * block contents
  *
  * @return object
  */
 public function get_content()
 {
     global $USER, $CFG;
     if ($this->content !== NULL) {
         return $this->content;
     }
     $this->content = new stdClass();
     $this->content->text = '';
     $this->content->footer = '';
     $content = array();
     // limits the number of courses showing up
     $courses_limit = 21;
     // FIXME: this should be a block setting, rather than a global setting
     if (isset($CFG->mycoursesperpage)) {
         $courses_limit = $CFG->mycoursesperpage;
     }
     $morecourses = false;
     if ($courses_limit > 0) {
         $courses_limit = $courses_limit + 1;
     }
     $courses = enrol_get_my_courses('id, shortname', 'visible DESC,sortorder ASC', $courses_limit);
     $site = get_site();
     $course = $site;
     //just in case we need the old global $course hack
     if (is_enabled_auth('mnet')) {
         $remote_courses = get_my_remotecourses();
     }
     if (empty($remote_courses)) {
         $remote_courses = array();
     }
     if ($courses_limit > 0 && count($courses) + count($remote_courses) >= $courses_limit) {
         // get rid of any remote courses that are above the limit
         $remote_courses = array_slice($remote_courses, 0, $courses_limit - count($courses), true);
         if (count($courses) >= $courses_limit) {
             //remove the 'marker' course that we retrieve just to see if we have more than $courses_limit
             array_pop($courses);
         }
         $morecourses = true;
     }
     if (array_key_exists($site->id, $courses)) {
         unset($courses[$site->id]);
     }
     foreach ($courses as $c) {
         if (isset($USER->lastcourseaccess[$c->id])) {
             $courses[$c->id]->lastaccess = $USER->lastcourseaccess[$c->id];
         } else {
             $courses[$c->id]->lastaccess = 0;
         }
     }
     if (empty($courses) && empty($remote_courses)) {
         $content[] = get_string('nocourses', 'my');
     } else {
         ob_start();
         require_once $CFG->dirroot . "/course/lib.php";
         print_overview($courses, $remote_courses);
         $content[] = ob_get_contents();
         ob_end_clean();
     }
     // if more than 20 courses
     if ($morecourses) {
         $content[] = '<br />...';
     }
     $this->content->text = implode($content);
     return $this->content;
 }
 /**
  * Serves requests to /theme/essential/inspector.ajax.php
  *
  * @param string $term search term.
  * @return array of results.
  * @throws coding_exception
  */
 public function inspector_ajax($term)
 {
     global $USER;
     $data = array();
     $courses = enrol_get_my_courses();
     $site = get_site();
     if (array_key_exists($site->id, $courses)) {
         unset($courses[$site->id]);
     }
     foreach ($courses as $c) {
         if (isset($USER->lastcourseaccess[$c->id])) {
             $courses[$c->id]->lastaccess = $USER->lastcourseaccess[$c->id];
         } else {
             $courses[$c->id]->lastaccess = 0;
         }
     }
     // Get remote courses.
     $remotecourses = array();
     if (is_enabled_auth('mnet')) {
         $remotecourses = get_my_remotecourses();
     }
     // Remote courses will have -ve remoteid as key, so it can be differentiated from normal courses.
     foreach ($remotecourses as $id => $val) {
         $remoteid = $val->remoteid * -1;
         $val->id = $remoteid;
         $courses[$remoteid] = $val;
     }
     foreach ($courses as $course) {
         $modinfo = get_fast_modinfo($course);
         $courseformat = course_get_format($course->id);
         $course = $courseformat->get_course();
         $courseformatsettings = $courseformat->get_format_options();
         $sesskey = sesskey();
         foreach ($modinfo->get_section_info_all() as $section => $thissection) {
             if (!$thissection->uservisible) {
                 continue;
             }
             if (is_object($thissection)) {
                 $thissection = $modinfo->get_section_info($thissection->section);
             } else {
                 $thissection = $modinfo->get_section_info($thissection);
             }
             if ((string) $thissection->name !== '') {
                 $sectionname = format_string($thissection->name, true, array('context' => context_course::instance($course->id)));
             } else {
                 $sectionname = $courseformat->get_section_name($thissection->section);
             }
             if ($thissection->section <= $course->numsections) {
                 // Do not link 'orphaned' sections.
                 $courseurl = new moodle_url('/course/view.php');
                 $courseurl->param('id', $course->id);
                 $courseurl->param('sesskey', $sesskey);
                 if (!empty($courseformatsettings['coursedisplay']) && $courseformatsettings['coursedisplay'] == COURSE_DISPLAY_MULTIPAGE) {
                     $courseurl->param('section', $thissection->section);
                     $coursehref = $courseurl->out(false);
                 } else {
                     $coursehref = $courseurl->out(false) . '#section-' . $thissection->section;
                 }
                 $label = $course->fullname . ' - ' . $sectionname;
                 if (stristr($label, $term)) {
                     $data[] = array('id' => $coursehref, 'label' => $label, 'value' => $label);
                 }
             }
             if (!empty($modinfo->sections[$thissection->section])) {
                 foreach ($modinfo->sections[$thissection->section] as $modnumber) {
                     $mod = $modinfo->cms[$modnumber];
                     if (!empty($mod->url)) {
                         $instancename = $mod->get_formatted_name();
                         $label = $course->fullname . ' - ' . $sectionname . ' - ' . $instancename;
                         if (stristr($label, $term)) {
                             $data[] = array('id' => $mod->url->out(false), 'label' => $label, 'value' => $label);
                         }
                     }
                 }
             }
         }
     }
     return $data;
 }