1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
<?PHP // $Id: view.php,v 1.65.2.4 2005/01/22 09:05:49 martinlanghoff Exp $
// Display the course home page.
require_once('../config.php');
require_once('lib.php');
require_once($CFG->libdir.'/blocklib.php');
optional_variable($id);
optional_variable($name);
if (!$id and !$name) {
error("Must specify course id or short name");
}
if (!empty($_GET['name'])) {
if (! ($course = get_record("course", "shortname", $name)) ) {
error("That's an invalid short course name");
}
} else {
if (! ($course = get_record("course", "id", $id)) ) {
error("That's an invalid course id");
}
}
require_login($course->id);
require_once($CFG->dirroot.'/calendar/lib.php'); /// This is after login because it needs $USER
add_to_log($course->id, "course", "view", "view.php?id=$course->id", "$course->id");
$course->format = clean_param($course->format, PARAM_ALPHA);
if (!file_exists($CFG->dirroot.'/course/format/'.$course->format.'/format.php')) {
$course->format = 'weeks'; // Default format is weeks
}
// Doing this now so we can pass the results to block_action()
// and dodge the overhead of doing the same work twice.
$blocks = $course->blockinfo;
$delimpos = strpos($blocks, ':');
if($delimpos === false) {
// No ':' found, we have all left blocks
$leftblocks = explode(',', $blocks);
$rightblocks = array();
}
else if($delimpos === 0) {
// ':' at start of string, we have all right blocks
$blocks = substr($blocks, 1);
$leftblocks = array();
$rightblocks = explode(',', $blocks);
}
else {
// Both left and right blocks
$leftpart = substr($blocks, 0, $delimpos);
$rightpart = substr($blocks, $delimpos + 1);
$leftblocks = explode(',', $leftpart);
$rightblocks = explode(',', $rightpart);
}
if (!isset($USER->editing)) {
$USER->editing = false;
}
$editing = false;
if (isteacheredit($course->id)) {
if (isset($edit)) {
if ($edit == "on") {
$USER->editing = true;
} else if ($edit == "off") {
$USER->editing = false;
}
}
$editing = $USER->editing;
if (isset($hide) and confirm_sesskey()) {
set_section_visible($course->id, $hide, '0');
}
if (isset($show) and confirm_sesskey()) {
set_section_visible($course->id, $show, '1');
}
if (isset($_GET['blockaction']) and confirm_sesskey()) {
if (isset($_GET['blockid'])) {
block_action($course, $leftblocks, $rightblocks, strtolower($_GET['blockaction']), intval($_GET['blockid']));
}
}
// This has to happen after block_action() has possibly updated the two arrays
$allblocks = array_merge($leftblocks, $rightblocks);
$missingblocks = array();
$recblocks = get_records('blocks','visible','1');
// Note down which blocks are going to get displayed
blocks_used($allblocks, $recblocks);
if($editing && $recblocks) {
foreach($recblocks as $recblock) {
// If it's not hidden or displayed right now...
if(!in_array($recblock->id, $allblocks) && !in_array(-($recblock->id), $allblocks)) {
// And if it's applicable for display in this format...
$formats = block_method_result($recblock->name, 'applicable_formats');
if( isset($formats[$course->format]) ? $formats[$course->format] : !empty($formats['all'])) {
// Translation: if the course format is explicitly accepted/rejected, use
// that setting. Otherwise, fallback to the 'all' format. The empty() test
// uses the trick that empty() fails if 'all' is either !isset() or false.
// Add it to the missing blocks
$missingblocks[] = $recblock->id;
}
}
}
}
if (!empty($section)) {
if (!empty($move) and confirm_sesskey()) {
if (!move_section($course, $section, $move)) {
notify("An error occurred while moving a section");
}
}
}
} else {
$USER->editing = false;
// Note down which blocks are going to get displayed
$allblocks = array_merge($leftblocks, $rightblocks);
$recblocks = get_records('blocks','visible','1');
blocks_used($allblocks, $recblocks);
}
$SESSION->fromdiscussion = "$CFG->wwwroot/course/view.php?id=$course->id";
if ($course->id == SITEID) { // This course is not a real course.
redirect("$CFG->wwwroot/");
}
$strcourse = get_string("course");
$loggedinas = "<p class=\"logininfo\">".user_login_string($course, $USER)."</p>";
print_header("$strcourse: $course->fullname", "$course->fullname", "$course->shortname",
"", "", true, update_course_icon($course->id), $loggedinas);
get_all_mods($course->id, $mods, $modnames, $modnamesplural, $modnamesused);
if (! $sections = get_all_sections($course->id)) { // No sections found
// Double-check to be extra sure
if (! $section = get_record("course_sections", "course", $course->id, "section", 0)) {
$section->course = $course->id; // Create a default section.
$section->section = 0;
$section->visible = 1;
$section->id = insert_record("course_sections", $section);
}
if (! $sections = get_all_sections($course->id) ) { // Try again
error("Error finding or creating section structures for this course");
}
}
if (empty($course->modinfo)) { // Course cache was never made
rebuild_course_cache($course->id);
if (! $course = get_record("course", "id", $course->id) ) {
error("That's an invalid course id");
}
}
// If the block width cache is not set, set it
if(!isset($SESSION->blockcache->width->{$course->id}) || $editing) {
// This query might be optimized away if we 're in editing mode
if(!isset($recblocks)) {
$recblocks = get_records('blocks','visible','1');
}
$preferred_width_left = blocks_preferred_width($leftblocks, $recblocks);
$preferred_width_right = blocks_preferred_width($rightblocks, $recblocks);
// This may be kind of organizational overkill, granted...
// But is there any real need to simplify the structure?
$SESSION->blockcache->width->{$course->id}->left = $preferred_width_left;
$SESSION->blockcache->width->{$course->id}->right = $preferred_width_right;
}
else {
$preferred_width_left = $SESSION->blockcache->width->{$course->id}->left;
$preferred_width_right = $SESSION->blockcache->width->{$course->id}->right;
}
require("$CFG->dirroot/course/format/$course->format/format.php"); // Include the actual course format
print_footer(NULL, $course);
?>
|