--- /dev/null
+<?PHP // $Id$
+
+// block.php - allows admin to edit all local configuration variables for a block
+
+ require_once('../config.php');
+ require_once($CFG->libdir.'/blocklib.php');
+
+ require_login();
+
+ if (!isadmin()) {
+ error('Only an admin can use this page');
+ }
+ if (!$site = get_site()) {
+ error("Site isn't defined!");
+ }
+
+ require_variable($_REQUEST['block']);
+ $blockid = intval($_REQUEST['block']);
+
+ if(($blockrecord = get_record('blocks', 'id', $blockid)) === false) {
+ error('This block does not exist');
+ }
+
+ $block = block_instance($blockrecord->name, NULL);
+ if($block === false) {
+ error('Problem in instantiating block object');
+ }
+
+/// If data submitted, then process and store.
+
+ if ($config = data_submitted()) {
+ unset($config['block']); // This will always be set if we have reached this point
+ $block->handle_config($config);
+ print_header();
+ redirect("$CFG->wwwroot/$CFG->admin/blocks.php", get_string("changessaved"), 1);
+ exit;
+ }
+
+/// Otherwise print the form.
+
+ $stradmin = get_string('administration');
+ $strconfiguration = get_string('configuration');
+ $strmanageblocks = get_string('manageblocks');
+ $strblockname = $block->get_title();
+
+ print_header($site->shortname.': '.$strblockname.": $strconfiguration", $site->fullname,
+ "<a href=\"index.php\">$stradmin</a> -> ".
+ "<a href=\"configure.php\">$strconfiguration</a> -> ".
+ "<a href=\"blocks.php\">$strmanageblocks</a> -> ".$strblockname);
+
+ print_heading($strblockname);
+
+ print_simple_box('<center>'.get_string('configwarning').'</center>', 'center', '50%');
+ echo '<br />';
+
+ $block->print_config();
+
+ print_footer();
+
+?>
--- /dev/null
+<?PHP // $Id$
+
+ // Allows the admin to configure blocks (hide/show, delete and configure)
+
+ require_once('../config.php');
+ require_once($CFG->libdir.'/blocklib.php');
+
+ optional_variable($_GET['hide']);
+ optional_variable($_GET['show']);
+ optional_variable($_GET['delete']);
+ optional_variable($_GET['confirm'], 0);
+ $delete = $_GET['delete']; // Dependency remover
+
+ require_login();
+
+ if (!isadmin()) {
+ error("Only administrators can use this page!");
+ }
+
+ if (!$site = get_site()) {
+ error("Site isn't defined!");
+ }
+
+
+/// Print headings
+
+ $stradministration = get_string('administration');
+ $strconfiguration = get_string('configuration');
+ $strmanageblocks = get_string('manageblocks');
+ $strdelete = get_string('delete');
+ $strversion = get_string('version');
+ $strhide = get_string('hide');
+ $strshow = get_string('show');
+ $strsettings = get_string('settings');
+ $strcourses = get_string('courses');
+ $strname = get_string('name');
+
+ print_header("$site->shortname: $strmanageblocks", "$site->fullname",
+ "<a href=\"index.php\">$stradministration</a> -> ".
+ "<a href=\"configure.php\">$strconfiguration</a> -> $strmanageblocks");
+
+ print_heading($strmanageblocks);
+
+
+/// If data submitted, then process and store.
+
+ if (!empty($_GET['hide'])) {
+ if (!$block = get_record('blocks', 'id', $_GET['hide'])) {
+ error("Block doesn't exist!");
+ }
+ set_field('blocks', 'visible', '0', 'id', $block->id); // Hide block
+
+ // [pj] There is no need to do this, since print_course_blocks()
+ // will not display blocks which are disabled. In fact, the
+ // comment "This block is hidden. Don't show it." there
+ // suggests that this db update SHOULDN'T be needed.
+ ///I'M NOT SURE IF THIS IS THE CORRECT APPROACH
+ //blocks_update_every_block_by_id($block->id, "hide"); // Hide blocks in all courses by id
+ }
+
+ if (!empty($_GET['show'])) {
+ if (!$block = get_record('blocks', 'id', $_GET['show'])) {
+ error("Block doesn't exist!");
+ }
+ set_field('blocks', 'visible', '1', 'id', $block->id); // Show block
+ // [pj] See note above
+ ///I'M NOT SURE IF THIS IS THE CORRECT APPROACH
+ //blocks_update_every_block_by_id($block->id,"show"); // Show blocks in all courses by id
+ }
+
+ if (!empty($delete)) {
+
+ if (!$block = get_record('blocks', 'id', $delete)) {
+ error("Block doesn't exist!");
+ }
+
+ $strblockname = get_string('modulename', 'block_'.$block->name);
+
+ if (!$_GET['confirm']) {
+ notice_yesno(get_string('blockdeleteconfirm', '', $strblockname),
+ 'blocks.php?delete='.$block->id.'&confirm=1',
+ 'blocks.php');
+ print_footer();
+ exit;
+
+ } else {
+ // Delete block
+ if (!delete_records('blocks', 'id', $block->id)) {
+ notify("Error occurred while deleting the $strblockname record from blocks table");
+ }
+
+ blocks_update_every_block_by_id($block->id, 'delete'); // Delete blocks in all courses by id
+
+ // Then the tables themselves
+
+ if ($tables = $db->Metatables()) {
+ $prefix = $CFG->prefix.$block->name;
+ foreach ($tables as $table) {
+ if (strpos($table, $prefix) === 0) {
+ if (!execute_sql("DROP TABLE $table", false)) {
+ notify("ERROR: while trying to drop table $table");
+ }
+ }
+ }
+ }
+
+ $a->block = $strblockname;
+ $a->directory = $CFG->dirroot.'/blocks/'.$block->name;
+ notice(get_string('blockdeletefiles', '', $a), 'blocks.php');
+ }
+ }
+
+/// Main display starts here
+
+/// Get and sort the existing blocks
+
+ if (!$blocks = get_records('blocks')) {
+ error('No blocks found!'); // Should never happen
+ }
+
+ foreach ($blocks as $block) {
+ if(($blockobject = block_instance($block->name, NULL)) === false) {
+ // Failed to load
+ continue;
+ }
+ $blockbyname[$blockobject->get_title()] = $block->id;
+ $blockobjects[$block->id] = $blockobject;
+ }
+ ksort($blockbyname);
+
+/// Print the table of all blocks
+
+ if (empty($THEME->custompix)) {
+ $pixpath = '../pix';
+ // [pj] This is not used anywhere, but I'm leaving it in for the future
+ //$modpixpath = '../mod';
+ } else {
+ $pixpath = '../theme/'.$CFG->theme.'/pix';
+ // [pj] This is not used anywhere, but I'm leaving it in for the future
+ //$modpixpath = '../theme/'.$CFG->theme.'/pix/mod';
+ }
+
+ $table->head = array ($strname, $strcourses, $strversion, $strhide.'/'.$strshow, $strdelete, $strsettings);
+ $table->align = array ('LEFT', 'RIGHT', 'LEFT', 'CENTER', 'CENTER', 'CENTER');
+ $table->wrap = array ("NOWRAP", "", "", "", "","");
+ $table->size = array ("100%", "10", "10", "10", "10","12");
+ $table->width = "100";
+
+ foreach ($blockbyname as $blockname => $blockid) {
+
+ // [pj] This is not used anywhere, but I'm leaving it in for the future
+ //$icon = "<img src=\"$modpixpath/$block->name/icon.gif\" hspace=10 height=16 width=16 border=0>";
+ $blockobject = $blockobjects[$blockid];
+
+ $delete = '<a href="blocks.php?delete='.$blockid.'">'.$strdelete.'</a>';
+
+ $settings = ''; // By default, no configuration
+ if($blockobject->has_config()) {
+ $settings = '<a href="block.php?block='.$blockid.'">'.$strsettings.'</a>';
+ }
+
+ $count = blocks_get_courses_using_block_by_id($blockid);
+ $class = ''; // Nothing fancy, by default
+
+ if ($block->visible) {
+ $visible = '<a href="blocks.php?hide='.$blockid.'" title="'.$strhide.'">'.
+ '<img src="'.$pixpath.'/i/hide.gif" style="height: 16px; width: 16px;" /></a>';
+ } else {
+ $visible = '<a href="blocks.php?show='.$blockid.'" title="'.$strshow.'">'.
+ '<img src="'.$pixpath.'/i/show.gif" style="height: 16px; width: 16px;" /></a>';
+ $class = ' class="dimmed_text"'; // Leading space required!
+ }
+
+ $table->data[] = array ('<p'.$class.'>'.$blockobject->get_title().'</p>', $count, $blockobject->get_version(), $visible, $delete, $settings);
+ }
+ echo '<p>';
+ print_table($table);
+ echo '</p>';
+ print_footer();
+
+?>
/// Upgrade backup/restore system if necessary
-
require_once("$CFG->dirroot/backup/lib.php");
upgrade_backup_db("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
-
+/// Upgrade blocks system if necessary
+ require_once("$CFG->dirroot/lib/blocklib.php");
+ upgrade_blocks_db("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
+
+/// Check all blocks and load (or upgrade them if necessary)
+ upgrade_blocks_plugins("$CFG->wwwroot/$CFG->admin/index.php"); // Return here afterwards
+
/// Find and check all modules and load them up or upgrade them if necessary
if (!$mods = get_list_of_plugins("mod") ) {
get_string("adminhelplanguage")."</font><br />";
$configdata .= "<font size=+1> </font><a href=\"modules.php\">".get_string("managemodules")."</a> - <font size=1>".
get_string("adminhelpmanagemodules")."</font><br />";
+ $configdata .= "<font size=+1> </font><a href=\"blocks.php\">".get_string("manageblocks")."</a> - <font size=1>".
+ get_string("adminhelpmanageblocks")."</font><br />";
$configdata .= "<font size=+1> </font><a href=\"filters.php\">".get_string("managefilters")."</a> - <font size=1>".
get_string("adminhelpmanagefilters")."</font><br />";
if (!isset($CFG->disablescheduledbackups)) {
require_once ("../config.php");
require_once ("lib.php");
require_once ("backuplib.php");
+ require_once ("$CFG->libdir/blocklib.php");
optional_variable($id); // course id
optional_variable($cancel);
$db->debug = false;
if (set_config("backup_version", $backup_version) and set_config("backup_release", $backup_release)) {
notify(get_string("databasesuccess"), "green");
- notify(get_string("databaseupgradebackups", "", $backup_release));
+ notify(get_string("databaseupgradebackups", "", $backup_version));
print_continue($continueto);
exit;
} else {
$db->debug=false;
if (set_config("backup_version", $backup_version) and set_config("backup_release", $backup_release)) {
notify(get_string("databasesuccess"), "green");
- notify(get_string("databaseupgradebackups", "", $backup_release));
+ notify(get_string("databaseupgradebackups", "", $backup_version));
print_continue($continueto);
exit;
} else {
require_once ("../course/lib.php");
require_once ("lib.php");
require_once ("restorelib.php");
+ require_once("$CFG->libdir/blocklib.php");
//Optional
optional_variable($id);
$course->summary = addslashes($course_header->course_summary);
$course->format = addslashes($course_header->course_format);
$course->showgrades = addslashes($course_header->course_showgrades);
+ $course->blockinfo = addslashes($course_header->blockinfo);
$course->newsitems = addslashes($course_header->course_newsitems);
$course->teacher = addslashes($course_header->course_teacher);
$course->teachers = addslashes($course_header->course_teachers);
$course->visible = addslashes($course_header->course_visible);
$course->timecreated = addslashes($course_header->course_timecreated);
$course->timemodified = addslashes($course_header->course_timemodified);
+ //Adjust blockinfo field.
+ //NOTE: For now, it's imposible to find it in backup files because it isn't saved,
+ // so, we always rebuid it with defaults.
+ if (!$course->blockinfo) {
+ //Create blockinfo default content
+ if ($course->format == "social") {
+ $course->blockinfo = blocks_get_default_blocks (NULL,"participants,search_forums,calendar_month,calendar_upcoming,social_activities,recent_activity,admin,course_list");
+ } else {
+ //For topics and weeks formats (default built in the function)
+ $course->blockinfo = blocks_get_default_blocks();
+ }
+ }
//Now insert the record
$newid = insert_record("course",$course);
if ($newid) {
// database (backup_version) to determine whether upgrades should
// be performed (see db/backup_*.php)
-$backup_version = 2004041000; // The current version is a date (YYYYMMDDXX)
+$backup_version = 2004041800; // The current version is a date (YYYYMMDDXX)
$backup_release = "1.3 development"; // User-friendly version number
--- /dev/null
+CREATING NEW BLOCKS
+-------------------------------------------------------------------------------
+
+You have to derive a class that extends MoodleBlock.
+
+The derived class MUST:
+
+ * Implement a constructor that:
+ 1. Sets $this->content_type (BLOCK_TYPE_LIST or BLOCK_TYPE_TEXT)
+ 2. Sets $this->header (BLOCK_SHOW_HEADER or BLOCK_HIDE_HEADER)
+ 3. Sets $this->title
+ 4. Sets $this->version
+ 5. Sets $this->course equal to its only argument
+
+The derived class MAY:
+
+ * Declare that the block has a configuration interface.
+ To do so:
+
+ 1. Define a method has_config() {return true;}
+ 2. Define a method print_config() that prints whatever
+ configuration interface you want to have.
+ 3. Define a method handle_config($data) that does what
+ is needed. $data comes straight from data_submitted().
+
+ * Limit the course formats it can be displayed in.
+ To do so:
+
+ 1. Define a method applicable_formats() which returns a
+ bitwise AND of one or more COURSE_FORMAT_XXX defined
+ constants.
+
+ * Select a "preferred" width which the course format will try to honor.
+ To do so:
+
+ 1. Define a method preferred_width() which returns a number
+ measured in pixels.
+
+ * Declare that the block is going to hide its header.
+ To do so:
+
+ 1. Define a method hide_header() {return true;}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_activity_modules extends MoodleBlock {
+ function CourseBlock_activity_modules($course) {
+ $this->title = get_string('activities');
+ $this->content_type = BLOCK_TYPE_LIST;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+
+ function get_content() {
+ global $USER, $CFG;
+
+ // This is really NOT pretty, but let's do it simple for now...
+ global $modnamesused, $modnamesplural;
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = '';
+
+ if ($modnamesused) {
+ foreach ($modnamesused as $modname => $modfullname) {
+ if ($modname != 'label') {
+ $this->content->items[] = '<a href="../mod/'.$modname.'/index.php?id='.$this->course->id.'">'.$modnamesplural[$modname].'</a>';
+ $this->content->icons[] = '<img src="'.$CFG->modpixpath.'/'.$modname.'/icon.gif" height="16" width="16" alt="">';
+ }
+ }
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function activity_modules_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_admin extends MoodleBlock {
+ function CourseBlock_admin($course) {
+ $this->title = get_string('administration');
+ $this->content_type = BLOCK_TYPE_LIST;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+ function get_content() {
+ global $USER, $CFG, $THEME;
+
+ require_once($CFG->dirroot.'/mod/forum/lib.php');
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = '';
+
+ if (isguest()) {
+ return $this->content;
+ }
+
+ if (isteacher($this->course->id)) {
+
+ $isteacheredit = isteacheredit($this->course->id);
+
+ if ($isteacheredit) {
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/edit.gif" height="16" width="16" alt="">';
+ if (isediting($this->course->id)) {
+ $this->content->items[]='<a href="view.php?id='.$this->course->id.'&edit=off">'.get_string('turneditingoff').'</a>';
+ } else {
+ $this->content->items[]='<a href="view.php?id='.$this->course->id.'&edit=on">'.get_string('turneditingon').'</a>';
+ }
+ $this->content->items[]='<a href="edit.php?id='.$this->course->id.'">'.get_string('settings').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/settings.gif" height="16" width="16" alt="">';
+
+ if (iscreator() or !empty($CFG->teacherassignteachers)) {
+ if (!$this->course->teachers) {
+ $this->course->teachers = get_string('defaultcourseteachers');
+ }
+ $this->content->items[]='<a href="teacher.php?id='.$this->course->id.'">'.$this->course->teachers.'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/users.gif" height="16" width="16" alt="">';
+ }
+
+ if (!$this->course->students) {
+ $this->course->students = get_string('defaultcoursestudents');
+ }
+ $this->content->items[]='<a href="student.php?id='.$this->course->id.'">'.$this->course->students.'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/users.gif" height="16" width="16" alt="">';
+
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/backup/backup.php?id='.$this->course->id.'">'.get_string('backup').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/backup.gif" height="16" width="16" alt="">';
+
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/files/index.php?id='.$this->course->id.'&wdir=/backupdata">'.get_string('restore').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/restore.gif" height="16" width="16" alt="">';
+ $this->content->items[]='<a href="scales.php?id='.$this->course->id.'">'.get_string('scales').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/scales.gif" height="16" width="16" alt="">';
+ }
+
+ $this->content->items[]='<a href="grades.php?id='.$this->course->id.'">'.get_string('grades').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/grades.gif" height="16" width="16" alt="">';
+
+ $this->content->items[]='<a href="log.php?id='.$this->course->id.'">'.get_string('logs').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/log.gif" height="16" width="16" alt="">';
+
+ if ($isteacheredit) {
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/files/index.php?id='.$this->course->id.'">'.get_string('files').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/files.gif" height="16" width="16" alt="">';
+ }
+
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/doc/view.php?id='.$this->course->id.'&file=teacher.html">'.get_string('help').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->modpixpath.'/resource/icon.gif" height="16" width="16" alt="">';
+
+ if ($teacherforum = forum_get_course_forum($this->course->id, 'teacher')) {
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/mod/forum/view.php?f='.$teacherforum->id.'">'.get_string('nameteacher', 'forum').'</a>';
+ $this->content->icons[]='<img src="'.$CFG->modpixpath.'/forum/icon.gif" height="16" width="16" alt="">';
+ }
+
+ } else if (!isguest()) { // Students menu
+ if ($this->course->showgrades) {
+ $this->content->items[]='<a href="grade.php?id='.$this->course->id.'">'.get_string('grades').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/grades.gif" height="16" width="16" alt="">';
+ }
+ if ($this->course->showreports) {
+ $this->content->items[]='<a href="user.php?id='.$this->course->id.'&user='.$USER->id.'">'.get_string('activityreport').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/report.gif" height="16" width="16" alt="">';
+ }
+ if (is_internal_auth()) {
+ $this->content->items[]='<a href="'.$CFG->wwwroot.'/login/change_password.php?id='.$this->course->id.'">'.get_string('changepassword').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" height="16" width="16" alt="">';
+ } else if ($CFG->changepassword) {
+ $this->content->items[]='<a href="'.$CFG->changepassword.'">'.get_string('changepassword').'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" height="16" width="16" alt="">';
+ }
+ if ($CFG->allowunenroll) {
+ $this->content->items[]='<a href="unenrol.php?id='.$this->course->id.'">'.get_string('unenrolme', '', $this->course->shortname).'...</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" height="16" width="16" alt="">';
+ }
+ }
+
+ return $this->content;
+ }
+}
+
+/*
+function block_admin(&$course) {
+
+ global $USER, $CFG, $THEME;
+
+ $block = New object;
+
+ $block->title = get_string('administration');
+ $block->type = BLOCK_TYPE_LIST;
+
+ if (isguest()) {
+ return $block;
+ }
+
+ if (isteacher($course->id)) {
+
+ $isteacheredit = isteacheredit($course->id);
+
+ if ($isteacheredit) {
+ $block->icons[]="<img src=\"$CFG->pixpath/i/edit.gif\" height=16 width=16 alt=\"\">";
+ if (isediting($course->id)) {
+ $block->items[]="<a href=\"view.php?id=$course->id&edit=off\">".get_string("turneditingoff")."</a>";
+ } else {
+ $block->items[]="<a href=\"view.php?id=$course->id&edit=on\">".get_string("turneditingon")."</a>";
+ }
+ $block->items[]="<a href=\"edit.php?id=$course->id\">".get_string("settings")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/settings.gif\" height=16 width=16 alt=\"\">";
+
+ if (iscreator() or !empty($CFG->teacherassignteachers)) {
+ if (!$course->teachers) {
+ $course->teachers = get_string("defaultcourseteachers");
+ }
+ $block->items[]="<a href=\"teacher.php?id=$course->id\">$course->teachers...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/users.gif\" height=16 width=16 alt=\"\">";
+ }
+
+ if (!$course->students) {
+ $course->students = get_string("defaultcoursestudents");
+ }
+ $block->items[]="<a href=\"student.php?id=$course->id\">$course->students...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/users.gif\" height=16 width=16 alt=\"\">";
+
+ $block->items[]="<a href=\"$CFG->wwwroot/backup/backup.php?id=$course->id\">".get_string("backup")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/backup.gif\" height=16 width=16 alt=\"\">";
+
+ $block->items[]="<a href=\"$CFG->wwwroot/files/index.php?id=$course->id&wdir=/backupdata\">".get_string("restore")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/restore.gif\" height=16 width=16 alt=\"\">";
+ $block->items[]="<a href=\"scales.php?id=$course->id\">".get_string("scales")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/scales.gif\" height=16 width=16 alt=\"\">";
+ }
+
+ $block->items[]="<a href=\"grades.php?id=$course->id\">".get_string("grades")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/grades.gif\" height=16 width=16 alt=\"\">";
+
+ $block->items[]="<a href=\"log.php?id=$course->id\">".get_string("logs")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/log.gif\" height=16 width=16 alt=\"\">";
+
+ if ($isteacheredit) {
+ $block->items[]="<a href=\"$CFG->wwwroot/files/index.php?id=$course->id\">".get_string("files")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/files.gif\" height=16 width=16 alt=\"\">";
+ }
+
+ $block->items[]="<a href=\"$CFG->wwwroot/doc/view.php?id=$course->id&file=teacher.html\">".get_string("help")."...</a>";
+ $block->icons[]="<img src=\"$CFG->modpixpath/resource/icon.gif\" height=16 width=16 alt=\"\">";
+
+ if ($teacherforum = forum_get_course_forum($course->id, "teacher")) {
+ $block->items[]="<a href=\"$CFG->wwwroot/mod/forum/view.php?f=$teacherforum->id\">$teacherforum->name</a>";
+ $block->icons[]="<img src=\"$CFG->modpixpath/forum/icon.gif\" height=16 width=16 alt=\"\">";
+ }
+
+ } else if (!isguest()) { // Students menu
+ if ($course->showgrades) {
+ $block->items[]="<a href=\"grade.php?id=$course->id\">".get_string("grades")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/grades.gif\" height=16 width=16 alt=\"\">";
+ }
+ if ($course->showreports) {
+ $block->items[]="<a href=\"user.php?id=$course->id&user=$USER->id\">".get_string("activityreport")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/report.gif\" height=16 width=16 alt=\"\">";
+ }
+ if (is_internal_auth()) {
+ $block->items[]="<a href=\"$CFG->wwwroot/login/change_password.php?id=$course->id\">".
+ get_string("changepassword")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
+ } else if ($CFG->changepassword) {
+ $block->items[]="<a href=\"$CFG->changepassword\">".get_string("changepassword")."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
+ }
+ if ($CFG->allowunenroll) {
+ $block->items[]="<a href=\"unenrol.php?id=$course->id\">".get_string("unenrolme", "", $course->shortname)."...</a>";
+ $block->icons[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
+ }
+ }
+
+ return $block;
+}
+*/
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function admin_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_calendar_month extends MoodleBlock {
+ function CourseBlock_calendar_month($course) {
+ $this->title = get_string('calendar', 'calendar');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+
+ function get_content() {
+ global $USER, $CFG, $SESSION;
+ optional_variable($_GET['cal_m']);
+ optional_variable($_GET['cal_y']);
+
+ require_once($CFG->dirroot.'/calendar/lib.php');
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ calendar_session_vars();
+
+ if($this->course === NULL) {
+ // Overrides: use no course at all
+ $courseshown = false;
+ $defaultcourses = NULL;
+ }
+ else {
+ $courseshown = $this->course->id;
+ $defaultcourses = array($courseshown => 1);
+ }
+
+ // We 'll need this later
+ calendar_set_referring_course($courseshown);
+
+ if($courseshown !== false && is_int($SESSION->cal_show_course) && $SESSION->cal_show_course != $courseshown) {
+ // There is a filter in action that shows events from a course other than the current
+ // Obviously we have to cut it out
+ $SESSION->cal_show_course = true;
+ }
+ else if($courseshown !== false && is_array($SESSION->cal_show_course) && !in_array($courseshown, $SESSION->cal_show_course)) {
+ // Same as above, only there are many courses being shown. Unfortunately, not this one.
+ $SESSION->cal_show_course = true;
+ }
+
+ // Be VERY careful with the format for default courses arguments!
+ // Correct formatting is [courseid] => 1 to be concise with moodlelib.php functions.
+
+ calendar_set_filters($courses, $group, $user, $defaultcourses, $defaultcourses);
+
+ if($courseshown == 1) {
+ // For the front page
+ $this->content->text .= calendar_overlib_html();
+ $this->content->text .= calendar_top_controls('frontpage', array('m' => $_GET['cal_m'], 'y' => $_GET['cal_y']));
+ $this->content->text.= calendar_get_mini($courses, $group, $user, $_GET['cal_m'], $_GET['cal_y']);
+ // No filters for now
+ }
+ else {
+ // For any other course
+ $this->content->text .= calendar_overlib_html();
+ $this->content->text .= calendar_top_controls('course', array('id' => $courseshown, 'm' => $_GET['cal_m'], 'y' => $_GET['cal_y']));
+ $this->content->text .= calendar_get_mini($courses, $group, $user, $_GET['cal_m'], $_GET['cal_y']);
+ $this->content->text .= calendar_filter_controls('course');
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function calendar_month_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_calendar_upcoming extends MoodleBlock {
+ function CourseBlock_calendar_upcoming ($course) {
+ $this->title = get_string('upcomingevents', 'calendar');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+
+ function get_content() {
+ global $USER, $CFG, $SESSION;
+ optional_variable($_GET['cal_m']);
+ optional_variable($_GET['cal_y']);
+
+ require_once($CFG->dirroot.'/calendar/lib.php');
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ if($this->course === NULL) {
+ // Overrides: use no course at all
+ $courseshown = false;
+ $defaultcourses = NULL;
+ }
+ else {
+ $courseshown = $this->course->id;
+ $defaultcourses = array($courseshown => 1);
+ }
+
+ // We 'll need this later
+ calendar_set_referring_course($courseshown);
+
+ if($courseshown !== false && is_int($SESSION->cal_show_course) && $SESSION->cal_show_course != $courseshown) {
+ // There is a filter in action that shows events from a course other than the current
+ // Obviously we have to cut it out
+ $SESSION->cal_show_course = true;
+ }
+ else if($courseshown !== false && is_array($SESSION->cal_show_course) && !in_array($courseshown, $SESSION->cal_show_course)) {
+ // Same as above, only there are many courses being shown. Unfortunately, not this one.
+ $SESSION->cal_show_course = true;
+ }
+
+ // Be VERY careful with the format for default courses arguments!
+ // Correct formatting is [courseid] => 1 to be concise with moodlelib.php functions.
+
+ calendar_set_filters($courses, $group, $user, $defaultcourses, $defaultcourses);
+
+ $this->content->text = calendar_get_sideblock_upcoming($courses, $group, $user, get_user_preferences('calendar_lookahead', CALENDAR_UPCOMING_DAYS), get_user_preferences('calendar_maxevents', CALENDAR_UPCOMING_MAXEVENTS));
+
+ if(empty($this->content->text)) {
+ $this->content->text = '<div style="font-size: 0.8em; text-align: center;">'.get_string('noupcomingevents', 'calendar').'</div>';
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function calendar_upcoming_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_course_list extends MoodleBlock {
+ function CourseBlock_course_list ($course) {
+ $this->title = get_string('mycourses');
+ $this->content_type = BLOCK_TYPE_LIST;
+ $this->course = $course;
+ $this->version = 2004041800;
+ }
+
+ function get_content() {
+ global $THEME, $CFG, $USER;
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = '';
+
+ if (empty($THEME->custompix)) {
+ $icon = "<img src=\"$CFG->wwwroot/pix/i/course.gif\"".
+ " height=\"16\" width=\"16\" alt=\"".get_string("course")."\">";
+ } else {
+ $icon = "<img src=\"$CFG->wwwroot/theme/$CFG->theme/pix/i/course.gif\"".
+ " height=\"16\" width=\"16\" alt=\"".get_string("course")."\">";
+ }
+
+ if (isset($USER->id) and !isadmin()) { // Just print My Courses
+ if ($courses = get_my_courses($USER->id)) {
+ foreach ($courses as $course) {
+ if (!$course->category) {
+ continue;
+ }
+ $linkcss = $course->visible ? "" : " class=\"dimmed\" ";
+ $this->content->items[]="<a $linkcss title=\"$course->shortname\" ".
+ "href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->fullname</a>";
+ $this->content->icons[]=$icon;
+ }
+ $this->title = get_string('mycourses');
+ $this->content->footer = "<p><a href=\"$CFG->wwwroot/course/index.php\">".get_string("fulllistofcourses")."</a>...";
+ return $this->content;
+ }
+ }
+
+ $categories = get_categories("0"); // Parent = 0 ie top-level categories only
+ if ($categories) { //Check we have categories
+ if (count($categories) > 1) { // Just print top level category links
+ foreach ($categories as $category) {
+ $linkcss = $category->visible ? "" : " class=\"dimmed\" ";
+ $this->content->items[]="<a $linkcss href=\"$CFG->wwwroot/course/category.php?id=$category->id\">$category->name</a>";
+ $this->content->icons[]=$icon;
+ }
+ $this->content->footer = "<p><a href=\"$CFG->wwwroot/course/\">".get_string("searchcourses")."</a>...";
+ $this->title = get_string('categories');
+ } else { // Just print course names of single category
+ $category = array_shift($categories);
+ $courses = get_courses($category->id);
+
+ if ($courses) {
+ foreach ($courses as $course) {
+ $linkcss = $course->visible ? "" : " class=\"dimmed\" ";
+ $this->content->items[]="<a $linkcss title=\"$course->shortname\" ".
+ "href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->fullname</a>";
+ $this->content->icons[]=$icon;
+ }
+ $this->content->footer = "<p><a href=\"$CFG->wwwroot/course/index.php\">".get_string("fulllistofcourses")."</a>...";
+ } else {
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = get_string('nocoursesyet');
+ }
+ $this->title = get_string('courses');
+ }
+ }
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function course_list_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_course_summary extends MoodleBlock {
+ function CourseBlock_course_summary ($course) {
+ $this->title = get_string('blockname','block_course_summary');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041400;
+ }
+
+ function get_content() {
+ global $USER, $CFG;
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+ $this->content->text = format_text($this->course->summary, FORMAT_HTML);
+
+ return $this->content;
+ }
+
+ function hide_header() {return true;}
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function course_summary_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function blocks_upgrade($oldversion=0) {
+
+global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = execute_sql("CREATE TABLE `{$CFG->prefix}blocks` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(40) NOT NULL default '',
+ `version` int(10) NOT NULL default '0',
+ `cron` int(10) unsigned NOT NULL default '0',
+ `lastcron` int(10) unsigned NOT NULL default '0',
+ `visible` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`id`)
+ )
+ COMMENT = 'To register and update all the available blocks'");
+ }
+
+ //Finally, return result
+ return $result;
+}
+?>
--- /dev/null
+# $Id$
+#
+# Table structure for table `blocks`
+#
+
+CREATE TABLE `prefix_blocks` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `name` varchar(40) NOT NULL default '',
+ `version` int(10) NOT NULL default '0',
+ `cron` int(10) unsigned NOT NULL default '0',
+ `lastcron` int(10) unsigned NOT NULL default '0',
+ `visible` tinyint(1) NOT NULL default '1',
+ PRIMARY KEY (`id`)
+) TYPE=MyISAM;
+# --------------------------------------------------------
--- /dev/null
+<?php
+
+define('BLOCK_TYPE_LIST', 1);
+define('BLOCK_TYPE_TEXT', 2);
+
+class MoodleBlock {
+ var $str;
+ var $title = NULL;
+ var $course = NULL;
+ var $content_type = NULL;
+ var $content = NULL;
+ var $edit_controls = NULL;
+ var $version = NULL;
+
+ function name() {
+ // Returns the block name, as present in the class name,
+ // the database, the block directory, etc etc.
+ static $myname;
+ if($myname === NULL) {
+ $myname = strtolower(get_class($this));
+ $myname = substr($myname, strpos($myname, '_') + 1);
+ }
+ return $myname;
+ }
+
+ function get_content() {
+ // This should be implemented by the derived class.
+ return NULL;
+ }
+ function get_title() {
+ // Intentionally doesn't check if a title is set, for _test_self()
+ return $this->title;
+ }
+ function get_content_type() {
+ // Intentionally doesn't check if a content_type is set, for _test_self()
+ return $this->content_type;
+ }
+ function get_version() {
+ // Intentionally doesn't check if a version is set, for _test_self()
+ return $this->version;
+ }
+ function get_header() {
+ // Intentionally doesn't check if a header is set, for _test_self()
+ return $this->header;
+ }
+ function refresh_content() {
+ // Nothing special here, depends on content()
+ $this->content = NULL;
+ return $this->get_content();
+ }
+ function print_block() {
+ // Wrap it up, in case we have buttons too
+ $title = '<div style="float: left;">'.$this->title.'</div>';
+ if($this->edit_controls !== NULL) {
+ $title .= $this->edit_controls;
+ }
+ $this->get_content();
+
+ switch($this->content_type) {
+ case BLOCK_TYPE_TEXT:
+ if ($this->edit_controls !== NULL || !$this->hide_header()) {
+ print_side_block($title, $this->content->text, NULL, NULL, $this->content->footer);
+ } else {
+ print_side_block(NULL, $this->content->text, NULL, NULL, $this->content->footer);
+ }
+ break;
+ case BLOCK_TYPE_LIST:
+ if ($this->edit_controls !== NULL || !$this->hide_header()) {
+ print_side_block($title, '', $this->content->items, $this->content->icons, $this->content->footer);
+ } else {
+ print_side_block(NULL, '', $this->content->items, $this->content->icons, $this->content->footer);
+ }
+ break;
+ }
+ }
+ function print_shadow() {
+ $title = '<div style="float: left;">'.$this->title.'</div>';
+ if($this->edit_controls !== NULL) {
+ $title .= $this->edit_controls;
+ }
+ print_side_block($title, ' ', NULL, NULL, '');
+ }
+ function add_edit_controls($options, $blockid) {
+ global $CFG, $THEME;
+
+ // The block may be disabled
+ $blockid = intval($blockid);
+ $enabled = $blockid > 0;
+ $blockid = abs($blockid);
+
+ if (!isset($this->str)) {
+ $this->str->delete = get_string('delete');
+ $this->str->moveup = get_string('moveup');
+ $this->str->movedown = get_string('movedown');
+ $this->str->moveright = get_string('moveright');
+ $this->str->moveleft = get_string('moveleft');
+ $this->str->hide = get_string('hide');
+ $this->str->show = get_string('show');
+ }
+
+ $path = $CFG->wwwroot.'/course';
+
+ if (empty($THEME->custompix)) {
+ $pixpath = $path.'/../pix';
+ } else {
+ $pixpath = $path.'/../theme/'.$CFG->theme.'/pix';
+ }
+
+ $movebuttons = '<div style="float: right;">';
+
+ if($enabled) {
+ $icon = '/t/hide.gif';
+ $title = $this->str->hide;
+ }
+ else {
+ $icon = '/t/show.gif';
+ $title = $this->str->show;
+ }
+
+ $movebuttons .= '<a style="margin-right: 10px;" title="'.$title.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=toggle&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.$icon.'" /></a>';
+
+ $movebuttons .= '<a style="margin-right: 10px;" title="'.$this->str->delete.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=delete&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.'/t/delete.gif" /></a>';
+
+ if ($options & BLOCK_MOVE_LEFT) {
+ $movebuttons .= '<a style="margin-right: 3px;" title="'.$this->str->moveleft.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=moveside&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.'/t/left.gif" /></a>';
+ }
+ if ($options & BLOCK_MOVE_UP) {
+ $movebuttons .= '<a style="margin-right: 3px;" title="'.$this->str->moveup.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=moveup&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.'/t/up.gif" /></a>';
+ }
+ if ($options & BLOCK_MOVE_DOWN) {
+ $movebuttons .= '<a style="margin-right: 3px;" title="'.$this->str->movedown.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=movedown&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.'/t/down.gif" /></a>';
+ }
+ if ($options & BLOCK_MOVE_RIGHT) {
+ $movebuttons .= '<a style="margin-right: 3px;" title="'.$this->str->moveright.'" href="'.$path.'/view.php?id='.$this->course->id.'&blockaction=moveside&blockid='.$blockid.'">' .
+ '<img src="'.$pixpath.'/t/right.gif" /></a>';
+ }
+
+ $movebuttons .= '</div>';
+ $this->edit_controls = $movebuttons;
+ }
+
+ function _self_test() {
+ // Tests if this block has been implemented correctly.
+ // Also, $errors isn't used right now
+ $errors = array();
+
+ $correct = true;
+ if($this->get_title() === NULL) {
+ $errors[] = 'title_not_set';
+ $correct = false;
+ }
+ if(!in_array($this->get_content_type(), array(BLOCK_TYPE_LIST, BLOCK_TYPE_TEXT))) {
+ $errors[] = 'invalid_content_type';
+ $correct = false;
+ }
+ if($this->get_content() === NULL) {
+ $errors[] = 'content_not_set';
+ $correct = false;
+ }
+ if($this->get_version() === NULL) {
+ $errors[] = 'version_not_set';
+ $correct = false;
+ }
+ $allformats = COURSE_FORMAT_WEEKS | COURSE_FORMAT_TOPICS | COURSE_FORMAT_SOCIAL;
+ if(!($this->applicable_formats() & $allformats)) {
+ $errors[] = 'no_course_formats';
+ $correct = false;
+ }
+ $width = $this->preferred_width();
+ if(!is_int($width) || $width <= 0) {
+ $errors[] = 'invalid_width';
+ $correct = false;
+ }
+ return $correct;
+ }
+
+ function has_config() {
+ return false;
+ }
+ function print_config() {
+ // This does nothing, it's here to prevent errors from
+ // derived classes if they implement has_config() but not print_config()
+ }
+ function handle_config() {
+ // This does nothing, it's here to prevent errors from
+ // derived classes if they implement has_config() but not handle_config()
+ }
+ function applicable_formats() {
+ // Default case: the block can be used in all course types
+ return COURSE_FORMAT_WEEKS | COURSE_FORMAT_TOPICS | COURSE_FORMAT_SOCIAL;
+ }
+ function preferred_width() {
+ // Default case: the block wants to be 180 pixels wide
+ return 180;
+ }
+ function hide_header() {
+ //Default, false--> the header is showed
+ return false;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_news_items extends MoodleBlock {
+ function CourseBlock_news_items ($course) {
+ $this->title = get_string('latestnews');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041200;
+ }
+
+ function get_content() {
+ global $CFG;
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ require_once($CFG->dirroot.'/course/lib.php');
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ if ($this->course->newsitems) {
+ $news = forum_get_course_forum($this->course->id, 'news');
+ // Slightly hacky way to do it but...
+ ob_start();
+ echo '<font size="-2">';
+ forum_print_latest_discussions($news->id, $this->course->newsitems, "minimal", "", get_current_group($this->course->id));
+ echo '</font>';
+ $this->content->text = ob_get_contents();
+ ob_end_clean();
+ }
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function news_items_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_online_users extends MoodleBlock {
+ function CourseBlock_online_users ($course) {
+ $this->title = get_string('blockname','block_online_users');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041800;
+ }
+
+ function has_config() {return true;}
+
+ function print_config() {
+ global $CFG, $THEME;
+ print_simple_box_start('center', '', $THEME->cellheading);
+ include($CFG->dirroot.'/blocks/'.$this->name().'/config.html');
+ print_simple_box_end();
+ return true;
+ }
+ function handle_config($config) {
+ foreach ($config as $name => $value) {
+ set_config($name, $value);
+ }
+ return true;
+ }
+
+ function get_content() {
+ global $USER, $CFG;
+
+ $timetoshowusers = 300; //Seconds default
+
+ if (isset($CFG->block_online_users_timetosee)) {
+ $timetoshowusers = $CFG->block_online_users_timetosee * 60;
+ }
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ //Calculate if we are in separate groups
+ $isseparategroups = ($this->course->groupmode == SEPARATEGROUPS and $this->course->groupmodeforce and
+ !isteacheredit($this->course->id));
+
+ //Get the user current group
+ $currentgroup = $isseparategroups ? get_current_group($this->course->id) : NULL;
+
+ $groupmembers = "";
+ $select = "";
+
+ //Add this to the SQL to show only group users
+ if ($currentgroup !== NULL) {
+ $groupmembers = ", {$CFG->prefix}groups_members gm ";
+ $select .= " AND u.id = gm.userid AND gm.groupid = '$currentgroup'";
+ }
+
+ $timefrom = time()-$timetoshowusers;
+
+ $students = get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.picture, s.timeaccess
+ FROM {$CFG->prefix}user u,
+ {$CFG->prefix}user_students s
+ $groupmembers
+ WHERE u.id = s.userid and
+ s.course = {$this->course->id} and
+ s.timeaccess > $timefrom $select");
+
+ $teachers = get_records_sql("SELECT u.id, u.username, u.firstname, u.lastname, u.picture, s.timeaccess
+ FROM {$CFG->prefix}user u,
+ {$CFG->prefix}user_teachers s
+ $groupmembers
+ WHERE u.id = s.userid and
+ s.course = {$this->course->id} and
+ s.timeaccess > $timefrom $select");
+
+ if ($teachers || $students) {
+ if ($students) {
+ foreach ($students as $student) {
+ $student->fullname = fullname($student);
+ $users[$student->id] = $student;
+ }
+ }
+ if ($teachers) {
+ foreach ($teachers as $teacher) {
+ $teacher->fullname = fullname($teacher);
+ $users[$teacher->id] = $teacher;
+ }
+ }
+ } else {
+ $users = null;
+ }
+
+ //Calculate minutes
+ $minutes = floor($timetoshowusers/60);
+
+ $this->content->text = "<font size=\"-2\"><div align=center>(".get_string("periodnminutes","block_online_users",$minutes).")</div></font>";
+
+ //Now, we have in users, the list of users to show
+ //Because they are online
+ if ($users !== null) {
+ foreach ($users as $user) {
+ $this->content->text .= '<div style="text-align: left; font-size: 0.75em; padding-top: 5px;">';
+ $timeago = format_time(time() - $user->timeaccess);
+ if ($user->picture==0) {
+ $this->content->text .= '<img src="'.$CFG->pixpath.'/i/user.gif" style="height: 16px; width=16px; vertical-align: middle;" alt=""> ';
+ } else {
+ if ($CFG->slasharguments) {
+ $imgtag = '<img src="'.$CFG->wwwroot.'/user/pix.php/'.$user->id.'/f2.jpg" style="height: 16px; width=16px; vertical-align: middle;" alt=""> ';
+ } else {
+ $imgtag = '<img src="'.$CFG->wwwroot.'/user/pix.php?file=/'.$user->id.'/f2.jpg" style="height: 16px; width=16px; vertical-align: middle;" alt=""> ';
+ }
+ $this->content->text .= $imgtag;
+ }
+ $this->content->text .= '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&course='.$this->course->id.'" title="'.$timeago.'">'.$user->fullname.'</a></div>';
+ }
+/*
+ $table->align = array("right","left");
+ $table->cellpadding = 1;
+ $table->cellspacing = 1;
+ $table->data[] = array("<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">",$user->fullname);
+ }
+ // Slightly hacky way to do it but...
+ ob_start();
+ print_table($table);
+ //$this->content->text .= "<br>".ob_get_contents();
+ ob_end_clean();
+*/
+ } else {
+ $this->content->text .= "<font size=\"-1\"><p align=center>".get_string("none")."</p></font>";
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<form method="post" action="block.php">
+
+<table cellpadding="9" cellspacing="0">
+<tr valign="top">
+ <td align="right"><p>block_online_users_timetosee:</td>
+ <td>
+ <input name="block" type="hidden" value="<?php echo intval($_REQUEST['block']); ?>" />
+ <input name="block_online_users_timetosee" type="text" size="5" value="<?php if(isset($CFG->block_online_users_timetosee)) {
+ p($CFG->block_online_users_timetosee);
+ } else {
+ p(5);
+ } ?>" />
+ </td>
+ <td>
+ <?php print_string("configtimetosee", "block_online_users") ?>
+ </td>
+</tr>
+<tr>
+ <td colspan="3" align="center">
+ <input type="submit" value="<?php print_string("savechanges") ?>"></td>
+</tr>
+</table>
+
+</form>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function online_users_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_participants extends MoodleBlock {
+ function CourseBlock_participants ($course) {
+ $this->title = get_string('people');
+ $this->content_type = BLOCK_TYPE_LIST;
+ $this->course = $course;
+ $this->version = 2004041800;
+ }
+
+ function get_content() {
+ global $USER, $CFG;
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = '';
+
+ $strgroups = get_string('groups');
+ $strgroupmy = get_string('groupmy');
+
+ $this->content->items[]='<a title="'.get_string('listofallpeople').'" href="../user/index.php?id='.$this->course->id.'">'.get_string('participants').'</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/users.gif" height="16" width="16" alt="">';
+
+ if ($this->course->groupmode or !$this->course->groupmodeforce) {
+ if ($this->course->groupmode == VISIBLEGROUPS or isteacheredit($this->course->id)) {
+ $this->content->items[]='<a title="'.$strgroups.'" href="groups.php?id='.$this->course->id.'">'.$strgroups.'</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/group.gif" height="16" width="16" alt="">';
+ } else if ($this->course->groupmode == SEPARATEGROUPS and $this->course->groupmodeforce) {
+ // Show nothing
+ } else if ($currentgroup = get_current_group($this->course->id)) {
+ $this->content->items[]='<a title="'.$strgroupmy.'" href="group.php?id='.$this->course->id.'">'.$strgroupmy.'</a>';
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/group.gif" height="16" width="16" alt="">';
+ }
+ }
+
+ $fullname = fullname($USER, true);
+ $editmyprofile = '<a title="'.$fullname.'" href="../user/edit.php?id='.$USER->id.'&course='.$this->course->id.'">'.get_string('editmyprofile').'</a>';
+ if ($USER->description) {
+ $this->content->items[]= $editmyprofile;
+ } else {
+ $this->content->items[]= $editmyprofile." <blink>*</blink>";
+ }
+ $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/user.gif" height="16" width="16" alt="">';
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function participants_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_recent_activity extends MoodleBlock {
+ function CourseBlock_recent_activity ($course) {
+ $this->title = get_string('recentactivity');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+
+ function get_content() {
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ if ($this->course->showrecent) {
+ // Slightly hacky way to do it but...
+ ob_start();
+ print_recent_activity($this->course);
+ $this->content->text = ob_get_contents();
+ ob_end_clean();
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function recent_activity_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+
+class CourseBlock_search_forums extends MoodleBlock {
+ function CourseBlock_search_forums ($course) {
+ $this->title = get_string('search', 'forum');
+ $this->content_type = BLOCK_TYPE_TEXT;
+ $this->course = $course;
+ $this->version = 2004041000;
+ }
+
+ function get_content() {
+ global $USER, $CFG, $SESSION;
+ optional_variable($_GET['cal_m']);
+ optional_variable($_GET['cal_y']);
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->text = '';
+ $this->content->footer = '';
+
+ $form = forum_print_search_form($this->course, '', true);
+ $this->content->text = '<div align="center">'.$form.'</div>';
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function search_forums_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?php //$Id$
+
+class CourseBlock_social_activities extends MoodleBlock {
+ function CourseBlock_social_activities ($course) {
+ $this->title = get_string('blockname','block_social_activities');
+ $this->content_type = BLOCK_TYPE_LIST;
+ $this->course = $course;
+ $this->version = 2004041800;
+ }
+
+ function applicable_formats() {
+ return COURSE_FORMAT_SOCIAL;
+ }
+
+ function get_content() {
+ global $USER, $CFG;
+
+ if($this->content !== NULL) {
+ return $this->content;
+ }
+
+ $this->content = New object;
+ $this->content->items = array();
+ $this->content->icons = array();
+ $this->content->footer = '';
+
+ // To make our day, we start with an ugly hack
+ global $sections, $mods, $modnames;
+
+ $section = $sections[0];
+ // That wasn't so bad, was it?
+
+ $groupbuttons = $this->course->groupmode;
+ $groupbuttonslink = (!$this->course->groupmodeforce);
+ $isteacher = isteacher($this->course->id);
+ $isediting = isediting($this->course->id);
+ $ismoving = ismoving($this->course->id);
+ if ($ismoving) {
+ $strmovehere = get_string('movehere');
+ $strmovefull = strip_tags(get_string('movefull', '', "'$USER->activitycopyname'"));
+ $strcancel= get_string('cancel');
+ $stractivityclipboard = $USER->activitycopyname;
+ }
+
+ $modinfo = unserialize($this->course->modinfo);
+ $editbuttons = '';
+
+ if ($ismoving) {
+ $this->content->items[] = ' <img align="bottom" src="'.$CFG->pixpath.'/t/move.gif" height="11" width="11">';
+ $this->content->icons[] = $USER->activitycopyname.' (<a href="'.$CFG->wwwroot.'/course/mod.php?cancelcopy=true">'.$strcancel.'</a>)';
+ }
+
+ if (!empty($section->sequence)) {
+ $sectionmods = explode(',', $section->sequence);
+ foreach ($sectionmods as $modnumber) {
+ if (empty($mods[$modnumber])) {
+ continue;
+ }
+ $mod = $mods[$modnumber];
+ if ($isediting && !$ismoving) {
+ if ($groupbuttons) {
+ if (! $mod->groupmodelink = $groupbuttonslink) {
+ $mod->groupmode = $this->course->groupmode;
+ }
+
+ } else {
+ $mod->groupmode = false;
+ }
+ $editbuttons = '<br />'.make_editing_buttons($mod, true, true);
+ } else {
+ $editbuttons = '';
+ }
+ if ($mod->visible || $isteacher) {
+ if ($ismoving) {
+ if ($mod->id == $USER->activitycopy) {
+ continue;
+ }
+ $this->content->items[] = '<a title="'.$strmovefull.'" href="'.$CFG->wwwroot.'/course/mod.php?moveto='.$mod->id.'">'.
+ '<img height="16" width="80" src="'.$CFG->pixpath.'/movehere.gif" alt="'.$strmovehere.'" border="0"></a>';
+ $this->content->icons[] = '';
+ }
+ $instancename = urldecode($modinfo[$modnumber]->name);
+ if (!empty($CFG->filterall)) {
+ $instancename = filter_text('<nolink>'.$instancename.'</nolink>', $this->course->id);
+ }
+ $linkcss = $mod->visible ? '' : ' class="dimmed" ';
+ if (!empty($modinfo[$modnumber]->extra)) {
+ $extra = urldecode($modinfo[$modnumber]->extra);
+ } else {
+ $extra = '';
+ }
+
+ if ($mod->modname == 'label') {
+ $this->content->items[] = format_text($extra, FORMAT_HTML).$editbuttons;
+ $this->content->icons[] = '';
+ } else {
+ $this->content->items[] = '<a title="'.$mod->modfullname.'" '.$linkcss.' '.$extra.
+ ' href="'.$CFG->wwwroot.'/mod/'.$mod->modname.'/view.php?id='.$mod->id.'">'.$instancename.'</a>'.$editbuttons;
+ $this->content->icons[] = '<img src="'.$CFG->modpixpath.'/'.$mod->modname.'/icon.gif" height="16" width="16" alt="'.$mod->modfullname.'">';
+ }
+ }
+ }
+ }
+
+ if ($ismoving) {
+ $this->content->items[] = '<a title="'.$strmovefull.'" href="'.$CFG->wwwroot.'/course/mod.php?movetosection='.$section->id.'">'.
+ '<img height="16" width="80" src="'.$CFG->pixpath.'/movehere.gif" alt="'.$strmovehere.'" border="0"></a>';
+ $this->content->icons[] = '';
+ }
+
+ if ($isediting && $modnames) {
+ $this->content->footer = '<div style="text-align: right;">'.
+ popup_form($CFG->wwwroot.'/course/mod.php?id='.$this->course->id.'&section='.$section->section.'&add=',
+ $modnames, 'section0', '', get_string('add').'...', 'mods', get_string('activities'), true) . '</div>';
+ } else {
+ $this->content->footer = '';
+ }
+
+ return $this->content;
+ }
+}
+
+?>
--- /dev/null
+<?PHP //$Id$
+//
+// This file keeps track of upgrades to Moodle's
+// blocks system.
+//
+// Sometimes, changes between versions involve
+// alterations to database structures and other
+// major things that may break installations.
+//
+// The upgrade function in this file will attempt
+// to perform all the necessary actions to upgrade
+// your older installtion to the current version.
+//
+// If there's something it cannot do itself, it
+// will tell you what you need to do.
+//
+// Versions are defined by backup_version.php
+//
+// This file is tailored to MySQL
+
+function social_activities_upgrade($oldversion=0) {
+
+ global $CFG;
+
+ $result = true;
+
+ if ($oldversion < 2004041000 and $result) {
+ $result = true; //Nothing to do
+ }
+
+ //Finally, return result
+ return $result;
+}
--- /dev/null
+<?PHP //$Id$
+// This file defines the current version of the
+// blocks code that is being used. This can be
+// compared against the values stored in the
+// database (blocks_version) to determine whether upgrades should
+// be performed (see db/backup_*.php)
+
+$blocks_version = 2004041500; // The current version is a date (YYYYMMDDXX)
require_once("../config.php");
require_once("lib.php");
+ require_once("$CFG->libdir/blocklib.php");
optional_variable($id, 0); // course id
optional_variable($category, 0); // category id
} else {
$form->timecreated = time();
+ //Create blockinfo default content
+ if ($form->format == "social") {
+ $form->blockinfo = blocks_get_default_blocks (NULL,"participants,search_forums,calendar_month,calendar_upcoming,social_activities,recent_activity,admin,course_list");
+ } else {
+ //For topics and weeks formats (default built in the function)
+ $form->blockinfo = blocks_get_default_blocks();
+ }
+
if ($newcourseid = insert_record("course", $form)) { // Set up new course
$section = NULL;
$section->course = $newcourseid; // Create a default section.
-<?php // $Id$
+<?php
// social.php - course format featuring social forum
// included from view.php
-
+
require_once("$CFG->dirroot/mod/forum/lib.php");
require_once("$CFG->dirroot/mod/resource/lib.php");
- $leftwidth = 210;
- $strgroups = get_string("groups");
- $strgroupmy = get_string("groupmy");
-?>
-
-<table width="100%" border="0" cellspacing="5" cellpadding="5">
- <tr>
- <td width="<?php echo $leftwidth?>" valign="top">
- <?php
- $moddata[]="<a title=\"".get_string("listofallpeople")."\" href=\"../user/index.php?id=$course->id\">".get_string("participants")."</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/users.gif\" height=16 width=16 alt=\"\">";
-
- if ($course->groupmode or !$course->groupmodeforce) {
- if ($course->groupmode == VISIBLEGROUPS or isteacheredit($course->id)) {
- $moddata[]="<a title=\"$strgroups\" href=\"groups.php?id=$course->id\">$strgroups</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- } else if ($course->groupmode == SEPARATEGROUPS and $course->groupmodeforce) {
- // Show nothing
- } else if ($currentgroup) {
- $moddata[]="<a title=\"$strgroupmy\" href=\"group.php?id=$course->id\">$strgroupmy</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- }
- }
-
- $fullname = fullname($USER, true);
- $editmyprofile = "<a title=\"$fullname\" href=\"../user/edit.php?id=$USER->id&course=$course->id\">".
- get_string("editmyprofile")."</A>";
- if ($USER->description) {
- $moddata[]= $editmyprofile;
- } else {
- $moddata[]= $editmyprofile." <blink>*</blink>";
- }
- $modicon[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
- print_side_block(get_string("people"), "", $moddata, $modicon, "", $leftwidth);
-
-
-/// Print a form to search forums
- $searchform = forum_print_search_form($course, "", true);
- $searchform = "<div align=\"center\">$searchform</div>";
- print_side_block(get_string("search","forum"), $searchform, "", "", "", $leftwidth);
-
-/// Print the calendar
- calendar_print_side_blocks();
+ // Bounds for block widths
+ define('BLOCK_L_MIN_WIDTH', 100);
+ define('BLOCK_L_MAX_WIDTH', 210);
+ define('BLOCK_R_MIN_WIDTH', 100);
+ define('BLOCK_R_MAX_WIDTH', 210);
+ optional_variable($preferred_width_left, 0);
+ optional_variable($preferred_width_right, 0);
+ $preferred_width_left = min($preferred_width_left, BLOCK_L_MAX_WIDTH);
+ $preferred_width_left = max($preferred_width_left, BLOCK_L_MIN_WIDTH);
+ $preferred_width_right = min($preferred_width_right, BLOCK_R_MAX_WIDTH);
+ $preferred_width_right = max($preferred_width_right, BLOCK_R_MIN_WIDTH);
-/// Then, print all the available resources (Section 0)
- print_section_block(get_string("activities"), $course, $sections[0],
- $mods, $modnames, $modnamesused, true, "100%");
-
-
-/// Print all the recent activity
- // Print all the recent activity
- if ($course->showrecent) {
- print_side_block_start(get_string("recentactivity"), $leftwidth, "sideblockrecentactivity");
- print_recent_activity($course);
- print_side_block_end();
+ $strgroups = get_string("groups");
+ $strgroupmy = get_string("groupmy");
+ $editing = isediting($course->id);
+
+ echo '<table width="100%" border="0" cellspacing="5" cellpadding="5">';
+ echo '<tr>';
+
+ if(block_have_active($leftblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
+ print_course_blocks($course, $leftblocks, BLOCK_LEFT);
+ echo '</td>';
+ }
+
+ echo "<td width=\"*\" valign=\"top\">";
+ if ($social = forum_get_course_forum($course->id, "social")) {
+ if (forum_is_subscribed($USER->id, $social->id)) {
+ $subtext = get_string("unsubscribe", "forum");
+ } else {
+ $subtext = get_string("subscribe", "forum");
+ }
+ $headertext = "<table border=0 width=100% cellpadding=0 cellspacing=0><tr><td>".
+ get_string("socialheadline").
+ "</td><td align=right><font size=1>".
+ "<a href=\"../mod/forum/subscribe.php?id=$social->id\">$subtext</a></td>".
+ "</tr></table>";
+ print_heading_block($headertext);
+ echo "<img alt=\"\" height=7 src=\"../pix/spacer.gif\"><br>";
+
+ forum_print_latest_discussions($social->id, 10, "plain", "", false);
+
+ } else {
+ notify("Could not find or create a social forum here");
+ }
+ echo '</td>';
+
+ if(block_have_active($rightblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
+ if ($editing && !empty($missingblocks)) {
+ block_print_add_block($course->id, $missingblocks);
}
+ print_course_blocks($course, $rightblocks, BLOCK_RIGHT);
+ print_spacer(1, 120, true);
+ echo '</td>';
+ }
+ echo '</tr>';
+ echo '</table>';
-/// Admin links and controls
- print_course_admin_links($course);
-
-/// My courses
- print_courses_sideblock(0, "$leftwidth");
-
- echo "</td>";
-
- echo "<td width=\"*\" valign=\"top\">";
- if ($social = forum_get_course_forum($course->id, "social")) {
- if (forum_is_subscribed($USER->id, $social->id)) {
- $subtext = get_string("unsubscribe", "forum");
- } else {
- $subtext = get_string("subscribe", "forum");
- }
- $headertext = "<table border=0 width=100% cellpadding=0 cellspacing=0 class=headingblockcontent><tr><td>".
- get_string("socialheadline").
- "</td><td align=right><font size=1>".
- "<a href=\"../mod/forum/subscribe.php?id=$social->id\">$subtext</a></td>".
- "</tr></table>";
- print_heading_block($headertext);
- echo "<img alt=\"\" height=7 src=\"../pix/spacer.gif\"><br>";
-
- forum_print_latest_discussions($social->id, 10, "plain", "", $currentgroup);
-
- } else {
- notify("Could not find or create a social forum here");
- }
- ?>
- </td>
- </tr>
-</table>
-
+?>
// Display the whole course as "topics" made of of modules
// In fact, this is very similar to the "weeks" format, in that
// each "topic" is actually a week. The main difference is that
- // the dates aren't printed - it's just an aesthetic thing for
+ // the dates aren't printed - it's just an aesthetic thing for
// courses that aren't so rigidly defined by time.
// Included from "view.php"
require_once("$CFG->dirroot/mod/forum/lib.php");
+ // Bounds for block widths
+ define('BLOCK_L_MIN_WIDTH', 100);
+ define('BLOCK_L_MAX_WIDTH', 210);
+ define('BLOCK_R_MIN_WIDTH', 100);
+ define('BLOCK_R_MAX_WIDTH', 210);
+
+ optional_variable($preferred_width_left, 0);
+ optional_variable($preferred_width_right, 0);
+ $preferred_width_left = min($preferred_width_left, BLOCK_L_MAX_WIDTH);
+ $preferred_width_left = max($preferred_width_left, BLOCK_L_MIN_WIDTH);
+ $preferred_width_right = min($preferred_width_right, BLOCK_R_MAX_WIDTH);
+ $preferred_width_right = max($preferred_width_right, BLOCK_R_MIN_WIDTH);
+
if (isset($topic)) {
$displaysection = course_set_display($course->id, $topic);
} else {
}
}
- if ($course->newsitems) {
- $news = forum_get_course_forum($course->id, "news");
- }
-
$streditsummary = get_string("editsummary");
$stradd = get_string("add");
$stractivities = get_string("activities");
$strtopic = get_string("topic");
$strgroups = get_string("groups");
$strgroupmy = get_string("groupmy");
- if (isediting($course->id)) {
+ if ($editing) {
$strstudents = moodle_strtolower($course->students);
$strtopichide = get_string("topichide", "", $strstudents);
$strtopicshow = get_string("topicshow", "", $strstudents);
/// Layout the whole page as three big columns.
echo "<table border=0 cellpadding=3 cellspacing=0 width=100%>";
-/// The left column ...
+ echo "<tr valign=top>\n";
- echo "<tr valign=top><td valign=top width=180>";
-
-/// Links to people
- $moddata[]="<a title=\"".get_string("listofallpeople")."\" href=\"../user/index.php?id=$course->id\">".get_string("participants")."</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/users.gif\" height=16 width=16 alt=\"\">";
-
- if ($course->groupmode or !$course->groupmodeforce) {
- if ($course->groupmode == VISIBLEGROUPS or isteacheredit($course->id)) {
- $moddata[]="<a title=\"$strgroups\" href=\"groups.php?id=$course->id\">$strgroups</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- } else if ($course->groupmode == SEPARATEGROUPS and $course->groupmodeforce) {
- // Show nothing
- } else if ($currentgroup) {
- $moddata[]="<a title=\"$strgroupmy\" href=\"group.php?id=$course->id\">$strgroupmy</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- }
- }
+/// The left column ...
- $fullname = fullname($USER, true);
- $editmyprofile = "<a title=\"$fullname\" href=\"../user/edit.php?id=$USER->id&course=$course->id\">".get_string("editmyprofile")."</a>";
- if ($USER->description) {
- $moddata[]= $editmyprofile;
- } else {
- $moddata[]= $editmyprofile." <blink>*</blink>";
- }
- $modicon[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
- print_side_block(get_string("people"), "", $moddata, $modicon);
-
-
-/// Links to all activity modules by type
- $moddata = array();
- $modicon = array();
- if ($modnamesused) {
- foreach ($modnamesused as $modname => $modfullname) {
- if ($modname != "label") {
- $moddata[] = "<a href=\"../mod/$modname/index.php?id=$course->id\">".$modnamesplural[$modname]."</a>";
- $modicon[] = "<img src=\"$CFG->modpixpath/$modname/icon.gif\" height=16 width=16 alt=\"\">";
- }
- }
+ if(block_have_active($leftblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
+ print_course_blocks($course, $leftblocks, BLOCK_LEFT);
+ echo '</td>';
}
- print_side_block($stractivities, "", $moddata, $modicon);
-
-/// Print the calendar
- calendar_print_side_blocks();
-
-/// Print a form to search forums
- $searchform = forum_print_search_form($course, "", true);
- $searchform = "<div align=\"center\">$searchform</div>";
- print_side_block(get_string("search","forum"), $searchform);
-
-/// Admin links and controls
- print_course_admin_links($course);
-
-/// My courses
- print_courses_sideblock(0, "180");
/// Start main column
- echo "</td><td width=\"*\">";
+ echo "<td width=\"*\">";
print_heading_block(get_string("topicoutline"), "100%", "outlineheadingblock");
print_spacer(8, 1, true);
}
-/// Print Section 0
+/// Print Section 0
$section = 0;
$thissection = $sections[$section];
echo "<tr>";
echo "<td nowrap bgcolor=\"$THEME->cellheading\" class=\"topicsoutlineside\" valign=top width=20> </td>";
echo "<td valign=top bgcolor=\"$THEME->cellcontent\" class=\"topicsoutlinecontent\" width=\"100%\">";
-
+
echo format_text($thissection->summary, FORMAT_HTML);
if (isediting($course->id)) {
" href=\"editsection.php?id=$thissection->id\"><img src=\"$CFG->pixpath/t/edit.gif\" ".
" height=11 width=11 border=0 alt=\"$streditsummary\"></a><br />";
}
-
+
echo '<br clear="all">';
-
+
print_section($course, $thissection, $mods, $modnamesused);
-
+
if (isediting($course->id)) {
echo "<div align=right>";
- popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
+ popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
$modnames, "section$section", "", "$stradd...", "mods", $stractivities);
echo "</div>";
}
-
+
echo "</td>";
echo "<td nowrap bgcolor=\"$THEME->cellheading\" class=\"topicsoutlineside\" valign=top align=center width=10>";
echo " </td></tr>";
echo "<td nowrap $colorsides valign=top width=20>";
echo "<p align=center><font size=3><b>$section</b></font></p>";
echo "</td>";
-
+
if (!isteacher($course->id) and !$thissection->visible) { // Hidden for students
echo "<td valign=top align=center $colormain width=\"100%\">";
echo get_string("notavailable");
}
echo '<br clear="all">';
-
+
print_section($course, $thissection, $mods, $modnamesused);
-
+
if (isediting($course->id)) {
echo "<div align=right>";
- popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
+ popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
$modnames, "section$section", "", "$stradd...");
echo "</div>";
}
-
+
echo "</td>";
}
echo "<td nowrap $colorsides valign=top align=center width=10>";
if (!empty($sectionmenu)) {
echo "<center>";
- echo popup_form("$CFG->wwwroot/course/view.php?id=$course->id&", $sectionmenu,
+ echo popup_form("$CFG->wwwroot/course/view.php?id=$course->id&", $sectionmenu,
"sectionmenu", "", get_string("jumpto"), "", "", true);
echo "</center>";
}
-
- if (!empty($news) or $course->showrecent) {
- echo "</td><td width=210>";
- /// Print all the news items.
+ echo "</td>";
- if (!empty($news)) {
- print_side_block_start(get_string("latestnews"), 210, "sideblocklatestnews");
- echo "<font size=\"-2\">";
- forum_print_latest_discussions($news->id, $course->newsitems, "minimal", "", $currentgroup);
- echo "</font>";
- print_side_block_end();
- }
-
- // Print all the recent activity
- if ($course->showrecent) {
- print_side_block_start(get_string("recentactivity"), 210, "sideblockrecentactivity");
- print_recent_activity($course);
- print_side_block_end();
+ // The right column
+ if(block_have_active($rightblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
+ if ($editing && !empty($missingblocks)) {
+ block_print_add_block($course->id, $missingblocks);
}
-
+ print_course_blocks($course, $rightblocks, BLOCK_RIGHT);
print_spacer(1, 120, true);
+ echo '</td>';
}
- echo "</td></tr></table>\n";
+ echo "</tr>\n";
+ echo "</table>\n";
?>
require_once("$CFG->dirroot/mod/forum/lib.php");
+ // Bounds for block widths
+ define('BLOCK_L_MIN_WIDTH', 100);
+ define('BLOCK_L_MAX_WIDTH', 210);
+ define('BLOCK_R_MIN_WIDTH', 100);
+ define('BLOCK_R_MAX_WIDTH', 210);
+
+ optional_variable($preferred_width_left, 0);
+ optional_variable($preferred_width_right, 0);
+ $preferred_width_left = min($preferred_width_left, BLOCK_L_MAX_WIDTH);
+ $preferred_width_left = max($preferred_width_left, BLOCK_L_MIN_WIDTH);
+ $preferred_width_right = min($preferred_width_right, BLOCK_R_MAX_WIDTH);
+ $preferred_width_right = max($preferred_width_right, BLOCK_R_MIN_WIDTH);
if (isset($week)) {
$displaysection = course_set_display($course->id, $week);
if ($course->newsitems) {
$news = forum_get_course_forum($course->id, "news");
}
-
+
$streditsummary = get_string("editsummary");
$stradd = get_string("add");
$stractivities = get_string("activities");
$strweek = get_string("week");
$strgroups = get_string("groups");
$strgroupmy = get_string("groupmy");
- if (isediting($course->id)) {
+ if ($editing) {
$strstudents = moodle_strtolower($course->students);
$strweekhide = get_string("weekhide", "", $strstudents);
$strweekshow = get_string("weekshow", "", $strstudents);
/// Layout the whole page as three big columns.
echo "<table border=0 cellpadding=3 cellspacing=0 width=100%>";
-/// The left column ...
+ echo "<tr valign=top>\n";
- echo "<tr valign=top><td valign=top width=180>";
-
-/// Links to people
- $moddata[]="<a title=\"".get_string("listofallpeople")."\" href=\"../user/index.php?id=$course->id\">".get_string("participants")."</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/users.gif\" height=16 width=16 alt=\"\">";
-
- if ($course->groupmode or !$course->groupmodeforce) {
- if ($course->groupmode == VISIBLEGROUPS or isteacheredit($course->id)) {
- $moddata[]="<a title=\"$strgroups\" href=\"groups.php?id=$course->id\">$strgroups</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- } else if ($course->groupmode == SEPARATEGROUPS and $course->groupmodeforce) {
- // Show nothing
- } else if ($currentgroup) {
- $moddata[]="<a title=\"$strgroupmy\" href=\"group.php?id=$course->id\">$strgroupmy</a>";
- $modicon[]="<img src=\"$CFG->pixpath/i/group.gif\" height=16 width=16 alt=\"\">";
- }
- }
+/// The left column ...
- $fullname = fullname($USER, true);
- $editmyprofile = "<a title=\"$fullname\" href=\"../user/edit.php?id=$USER->id&course=$course->id\">".get_string("editmyprofile")."</a>";
- if ($USER->description) {
- $moddata[]= $editmyprofile;
- } else {
- $moddata[]= $editmyprofile." <blink>*</blink>";
+ if(block_have_active($leftblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
+ print_course_blocks($course, $leftblocks, BLOCK_LEFT);
+ echo '</td>';
}
- $modicon[]="<img src=\"$CFG->pixpath/i/user.gif\" height=16 width=16 alt=\"\">";
- print_side_block(get_string("people"), "", $moddata, $modicon);
-
-
-/// Then all the links to activities by type
- $moddata = array();
- $modicon = array();
- if ($modnamesused) {
- foreach ($modnamesused as $modname => $modfullname) {
- if ($modname != "label") {
- $moddata[] = "<a href=\"../mod/$modname/index.php?id=$course->id\">".$modnamesplural[$modname]."</a>";
- $modicon[] = "<img src=\"$CFG->modpixpath/$modname/icon.gif\" height=16 width=16 alt=\"\">";
- }
- }
- }
- print_side_block($stractivities, "", $moddata, $modicon);
-
-/// Print the calendar
- calendar_print_side_blocks();
-
-/// Print a form to search forums
- $searchform = forum_print_search_form($course, "", true);
- $searchform = "<div align=\"center\">$searchform</div>";
- print_side_block(get_string("search","forum"), $searchform);
-
-/// Admin links and controls
- print_course_admin_links($course);
-
-/// My courses
- print_courses_sideblock(0, "180");
/// Start main column
echo "</td><td width=\"*\">";
}
echo '<br clear="all">';
-
+
print_section($course, $thissection, $mods, $modnamesused);
if (isediting($course->id)) {
echo "<div align=right>";
- popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
+ popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
$modnames, "section$section", "", "$stradd...", "mods", $stractivities);
echo "</div>";
}
if (isediting($course->id)) {
echo "<div align=right>";
- popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
+ popup_form("$CFG->wwwroot/course/mod.php?id=$course->id&section=$section&add=",
$modnames, "section$section", "", "$stradd...");
echo "</div>";
}
echo "</td>";
- }
+ }
echo "<td nowrap $colorsides valign=top align=center width=10>";
echo "<font size=1>";
- if ($displaysection == $section) {
+ if ($displaysection == $section) {
echo "<a href=\"view.php?id=$course->id&week=all\" title=\"$strshowallweeks\">".
"<img src=\"$CFG->pixpath/i/all.gif\" height=25 width=16 border=0></a><br />";
} else {
if (!empty($sectionmenu)) {
echo "<center>";
- echo popup_form("$CFG->wwwroot/course/view.php?id=$course->id&", $sectionmenu,
+ echo popup_form("$CFG->wwwroot/course/view.php?id=$course->id&", $sectionmenu,
"sectionmenu", "", get_string("jumpto"), "", "", true);
echo "</center>";
}
-
- if (!empty($news) or !empty($course->showrecent)) {
- echo "</td><td width=210>";
-
- // Print all the news items.
-
- if (!empty($news)) {
- print_side_block_start(get_string("latestnews"), 210, "sideblocklatestnews");
- echo "<font size=\"-2\">";
- forum_print_latest_discussions($news->id, $course->newsitems, "minimal", "", $currentgroup);
- echo "</font>";
- print_side_block_end();
- }
-
- // Print all the recent activity
- if (!empty($course->showrecent)) {
- print_side_block_start(get_string("recentactivity"), 210, "sideblockrecentactivity");
- print_recent_activity($course);
- print_side_block_end();
+
+
+ echo "</td>";
+
+ // The right column
+ if(block_have_active($rightblocks) || $editing) {
+ echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
+ if ($editing && !empty($missingblocks)) {
+ block_print_add_block($course->id, $missingblocks);
}
-
+ print_course_blocks($course, $rightblocks, BLOCK_RIGHT);
print_spacer(1, 120, true);
+ echo '</td>';
}
- echo "</td></tr></table>\n";
-
+ echo "</tr>\n";
+ echo "</table>\n";
?>
require_once("../config.php");
require_once("lib.php");
+ require_once("$CFG->libdir/blocklib.php");
require_once('../calendar/lib.php');
optional_variable($id);
}
if (!empty($_GET['name'])) {
- if (! $course = get_record("course", "shortname", $name) ) {
+ if (! ($course = get_record("course", "shortname", $name)) ) {
error("That's an invalid short course name");
}
} else {
- if (! $course = get_record("course", "id", $id) ) {
+ if (! ($course = get_record("course", "id", $id)) ) {
error("That's an invalid course id");
}
}
add_to_log($course->id, "course", "view", "view.php?id=$course->id", "$course->id");
+ if (!file_exists($CFG->dirroot.'/course/format/'.$course->format.'/format.php')) {
+ $course->format = 'weeks'; // Default format is weeks
+ }
+
+ // Can't avoid this... :(
+ switch($course->format) {
+ case 'weeks':
+ $courseformat = COURSE_FORMAT_WEEKS;
+ break;
+ case 'topics':
+ $courseformat = COURSE_FORMAT_TOPICS;
+ break;
+ case 'social':
+ $courseformat = COURSE_FORMAT_SOCIAL;
+ break;
+ default:
+ $courseformat = 0;
+ }
+
+ // 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 (isset($edit)) {
if ($edit == "on") {
$USER->editing = true;
} else if ($edit == "off") {
}
}
+ $editing = $USER->editing;
+
if (isset($hide)) {
set_section_visible($course->id, $hide, "0");
}
set_section_visible($course->id, $show, "1");
}
+ if (isset($_GET['blockaction'])) {
+ 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');
+ 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...
+ if(block_method_result($recblock->name, 'applicable_formats') & $courseformat) {
+ // Add it to the missing blocks
+ $missingblocks[] = $recblock->id;
+ }
+ }
+ }
+ }
+
+ $preferred_width_left = blocks_preferred_width($leftblocks, $recblocks);
+ $preferred_width_right = blocks_preferred_width($rightblocks, $recblocks);
+
if (!empty($section)) {
if (!empty($move)) {
if (!move_section($course, $section, $move)) {
redirect("$CFG->wwwroot/");
}
- $currentgroup = get_current_group($course->id);
-
$strcourse = get_string("course");
$loggedinas = "<p class=\"logininfo\">".user_login_string($course, $USER)."</p>";
- print_header("$strcourse: $course->fullname", "$course->fullname", "$course->shortname",
+ 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 (!file_exists("$CFG->dirroot/course/format/$course->format/format.php")) { // Default format is weeks
- $course->format = "weeks";
- }
-
require("$CFG->dirroot/course/format/$course->format/format.php"); // Include the actual course format
print_footer();
--- /dev/null
+<?PHP // $Id$
+
+$string['blockname'] = 'Course Summary';
+?>
--- /dev/null
+<?PHP // $Id$
+
+$string['blockname'] = 'Online Users';
+$string['periodnminutes'] = 'last $a minutes';
+$string['configtimetosee'] = 'Number of minutes to detect an user as currently online';
+?>
--- /dev/null
+<?PHP // $Id$
+
+$string['blockname'] = 'Social Activities';
+?>
$string['adminhelpedituser'] = 'Browse the list of user accounts and edit any of them';
$string['adminhelplanguage'] = 'For checking and editing the current language pack';
$string['adminhelplogs'] = 'Browse logs of all activity on this site';
+$string['adminhelpmanageblocks'] = 'Manage installed blocks and their settings';
$string['adminhelpmanagedatabase'] = 'Access the database directly (be careful!)';
$string['adminhelpmanagefilters'] = 'Choose text filters and related settings';
$string['adminhelpmanagemodules'] = 'Manage installed modules and their settings';
$string['backupuserfileshelp'] = 'Choose whether user files (eg profile images) should be included in automated backups';
$string['backupusershelp'] = 'Select whether you want to include all the users in the server or only the needed users for each course';
$string['backupversion'] = 'Backup Version';
+$string['blocksetup'] = 'Setting up block tables';
+$string['blocksuccess'] = '$a tables have been set up correctly';
$string['bycourseorder'] = 'By course order';
$string['cancel'] = 'Cancel';
$string['categories'] = 'Course categories';
$string['databasesetup'] = 'Setting up database';
$string['databasesuccess'] = 'Database was successfully upgraded';
$string['databaseupgradebackups'] = 'Backup version is now $a';
+$string['databaseupgradeblocks'] = 'Blocks version is now $a';
$string['databaseupgrades'] = 'Upgrading database';
$string['datemostrecentfirst'] = 'Date - most recent first';
$string['datemostrecentlast'] = 'Date - most recent last';
$string['mainmenu'] = 'Main menu';
$string['makeafolder'] = 'Make a folder';
$string['makeeditable'] = 'If you make \'$a\' editable by the web server process (eg apache) then you could edit this file directly from this page';
+$string['manageblocks'] = 'Blocks';
$string['managedatabase'] = 'Database';
$string['managefilters'] = 'Filters';
$string['managemodules'] = 'Modules';
--- /dev/null
+<?PHP //$Id$
+
+//This library includes all the necessary stuff to use blocks in course pages
+
+define('BLOCK_LEFT', 11);
+define('BLOCK_RIGHT', 12);
+define('BLOCK_MOVE_LEFT', 0x01);
+define('BLOCK_MOVE_RIGHT', 0x02);
+define('BLOCK_MOVE_UP', 0x04);
+define('BLOCK_MOVE_DOWN', 0x08);
+
+define('COURSE_FORMAT_WEEKS', 0x01);
+define('COURSE_FORMAT_TOPICS', 0x02);
+define('COURSE_FORMAT_SOCIAL', 0x04);
+
+//This function retrieves a method-defined property of a class WITHOUT instantiating an object
+//It seems that the only way to use the :: operator with variable class names is eval() :(
+//For caveats with this technique, see the PHP docs on operator ::
+function block_method_result($blockname, $method) {
+ if(!block_load_class($blockname)) {
+ return NULL;
+ }
+ return eval('return CourseBlock_'.$blockname.'::'.$method.'();');
+}
+
+//This function creates a new object of the specified block class
+function block_instance($blockname, $argument) {
+ if(!block_load_class($blockname)) {
+ return false;
+ }
+ $classname = 'CourseBlock_'.$blockname;
+ return New $classname($argument);
+}
+
+//This function loads the necessary class files for a block
+//Whenever you want to load a block, use this first
+function block_load_class($blockname) {
+ global $CFG;
+
+ @include_once($CFG->dirroot.'/blocks/moodleblock.class.php');
+ $classname = 'CourseBlock_'.$blockname;
+ @include_once($CFG->dirroot.'/blocks/'.$blockname.'/block_'.$blockname.'.php');
+
+ // After all this, return value indicating success or failure
+ return class_exists($classname);
+}
+
+//This function determines if there is some active block in an array of blocks
+function block_have_active($array) {
+ foreach($array as $blockid) {
+ if($blockid > 0) {
+ return true;
+ }
+ }
+ return false;
+}
+
+//This function print the one side of blocks in course main page
+function print_course_blocks(&$course, $blocksarray, $side) {
+ global $CFG;
+
+ $isediting = isediting($course->id);
+ $ismoving = ismoving($course->id);
+ $isteacheredit = isteacheredit($course->id);
+
+ if(!empty($blocksarray)) {
+ // Include the base class
+ @include_once($CFG->dirroot.'/blocks/moodleblock.class.php');
+ if(!class_exists('moodleblock')) {
+ error('Class MoodleBlock is not defined or file not found for /course/blocks/moodleblock.class.php');
+ }
+
+ $blockdata = get_records('blocks', 'visible', 1);
+ if($blockdata !== false) {
+
+ $lastblock = end($blocksarray);
+ $firstblock = reset($blocksarray);
+
+ foreach($blocksarray as $blockid) {
+ if(!isset($blockdata[abs($blockid)])) {
+ // This block is hidden. Don't show it.
+ continue;
+ }
+
+ $blockname = $blockdata[abs($blockid)]->name;
+ $block = block_instance($blockname, $course);
+ if($block === false) {
+ // Something went wrong
+ continue;
+ }
+
+ // There are various sanity checks commented out below
+ // because the block detection code should have already done them long ago.
+
+ /*
+ if(!is_subclass_of($block, 'MoodleBlock')) {
+ // Error: you have to derive from MoodleBlock
+ continue;
+ }
+
+ if($content === NULL || $title === NULL) {
+ // Error: This shouldn't have happened
+ continue;
+ }
+ */
+ if ($isediting && !$ismoving && $isteacheredit) {
+ $options = 0;
+ $options |= BLOCK_MOVE_UP * ($blockid != $firstblock);
+ $options |= BLOCK_MOVE_DOWN * ($blockid != $lastblock);
+ $options |= ($side == BLOCK_LEFT) ? BLOCK_MOVE_RIGHT : BLOCK_MOVE_LEFT;
+ $block->add_edit_controls($options, $blockid);
+ }
+
+ if($blockid < 0) {
+ // We won't print this block...
+ if($isediting) {
+ // Unless we 're in editing mode, in which case we 'll print a 'shadow'
+ $block->print_shadow();
+ }
+ continue;
+ }
+ // So simple...
+ $block->print_block();
+ }
+ }
+ }
+}
+
+//This iterates over an array of blocks and calculates the preferred width
+function blocks_preferred_width($blockarray, $blockinfos) {
+ $width = 0;
+
+ if(!is_array($blockarray) || empty($blockarray)) {
+ return 0;
+ }
+ foreach($blockarray as $blockid) {
+ if(isset($blockinfos[$blockid])) {
+ $blockname = $blockinfos[$blockid]->name;
+ $pref = block_method_result($blockname, 'preferred_width');
+ if($pref === NULL) {
+ continue;
+ }
+ if($pref > $width) {
+ $width = $pref;
+ }
+ }
+ }
+ return $width;
+}
+
+
+// $course passed by reference for speed
+// $leftblocks, $rightblocks passed by reference because block_action() needs to
+// update the arrays so that the change can be shown immediately.
+
+function block_action(&$course, &$leftblocks, &$rightblocks, $blockaction, $blockid) {
+
+ $blockid = abs(intval($blockid)); // Just to make sure
+
+ switch($blockaction) {
+ case 'toggle':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ $leftblocks[$block->position] = -$leftblocks[$block->position];
+ }
+ else {
+ $rightblocks[$block->position] = -$rightblocks[$block->position];
+ }
+ }
+ break;
+ case 'delete':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ unset($leftblocks[$block->position]);
+ }
+ else {
+ unset($rightblocks[$block->position]);
+ }
+ }
+ break;
+ case 'add':
+ // Toggle to enabled, or add it if it doesn't exist at all
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block === false) {
+ // It doesn't exist at all, so add it
+ $rightblocks[] = $blockid;
+ }
+ else if($block->enabled == false) {
+ // Enable it
+ if($block->side == BLOCK_LEFT) {
+ $leftblocks[$block->position] = -$leftblocks[$block->position];
+ }
+ else {
+ $rightblocks[$block->position] = -$rightblocks[$block->position];
+ }
+ }
+ break;
+ case 'moveup':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ if(isset($leftblocks[$block->position - 1])) {
+ // We can move it upwards
+ $oldblock = $leftblocks[$block->position - 1];
+ $leftblocks[$block->position - 1] = $leftblocks[$block->position]; // not $blockid, as this loses the sign
+ $leftblocks[$block->position] = $oldblock;
+ }
+ }
+ else {
+ if(isset($rightblocks[$block->position - 1])) {
+ // We can move it upwards
+ $oldblock = $rightblocks[$block->position - 1];
+ $rightblocks[$block->position - 1] = $rightblocks[$block->position]; // not $blockid, as this loses the sign
+ $rightblocks[$block->position] = $oldblock;
+ }
+ }
+ }
+ break;
+ case 'movedown':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ if(isset($leftblocks[$block->position + 1])) {
+ // We can move it downwards
+ $oldblock = $leftblocks[$block->position + 1];
+ $leftblocks[$block->position + 1] = $leftblocks[$block->position]; // not $blockid, as this loses the sign
+ $leftblocks[$block->position] = $oldblock;
+ }
+ }
+ else {
+ if(isset($rightblocks[$block->position + 1])) {
+ // We can move it downwards
+ $oldblock = $rightblocks[$block->position + 1];
+ $rightblocks[$block->position + 1] = $rightblocks[$block->position]; // not $blockid, as this loses the sign
+ $rightblocks[$block->position] = $oldblock;
+ }
+ }
+ }
+ break;
+ case 'moveside':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ unset($leftblocks[$block->position]);
+ $rightblocks[] = $block->enabled ? $blockid : -$blockid;
+ }
+ else {
+ unset($rightblocks[$block->position]);
+ $leftblocks[] = $block->enabled ? $blockid : -$blockid;
+ }
+ }
+ break;
+ }
+
+ $course->blockinfo = implode(',', $leftblocks).':'.implode(',',$rightblocks);
+ set_field('course', 'blockinfo', $course->blockinfo, 'id', $course->id);
+
+}
+
+// Searches for the block with ID $blockid in one or more of the two
+// blocks arrays. If not found, returns boolean false. Otherwise,
+// returns an object $finding where:
+// $finding->side = BLOCK_LEFT or BLOCK_RIGHT
+// $finding->enabled = true or false
+// $finding->position = index of corresponding array where found
+
+function block_find($blockid, $leftblocks, $rightblocks) {
+
+ if(($blockid = abs($blockid)) == 0) {
+ return false;
+ }
+
+ $finding->side = BLOCK_LEFT;
+ $finding->enabled = true;
+ $finding->position = NULL;
+
+ // First, search for the "enabled" block, since that's what we
+ // will be doing most of the time.
+
+ $key = array_search($blockid, $leftblocks);
+ if($key !== false && $key !== NULL) {
+ $finding->position = $key;
+ return $finding;
+ }
+ $key = array_search($blockid, $rightblocks);
+ if($key !== false && $key !== NULL) {
+ $finding->position = $key;
+ $finding->side = BLOCK_RIGHT;
+ return $finding;
+ }
+
+ // "enabled" block not found. Now search for the disabled block.
+ $finding->enabled = false;
+ $blockid = -$blockid;
+
+ $key = array_search($blockid, $leftblocks);
+ if($key !== false && $key !== NULL) {
+ $finding->position = $key;
+ return $finding;
+ }
+ $key = array_search($blockid, $rightblocks);
+ if($key !== false && $key !== NULL) {
+ $finding->position = $key;
+ $finding->side = BLOCK_RIGHT;
+ return $finding;
+ }
+
+ // Nothing found :(
+
+ return false;
+}
+
+//This function prints the add_block popup as necessary
+function block_print_add_block($courseid, $missingblocks) {
+ if (isediting($courseid)) {
+ $title = get_string('add');
+ if(!empty($missingblocks)) {
+ $blockdata = get_records_list('blocks', 'id', implode(',', $missingblocks));
+ if($blockdata !== false) {
+ foreach($blockdata as $block) {
+ $blockobject = block_instance($block->name, NULL);
+ if($blockobject === false) {
+ continue;
+ }
+ $menu[$block->id] = $blockobject->get_title();
+ }
+ $content = popup_form('view.php?id='.$courseid.'&blockaction=add&blockid=',$menu,'add_block','','choose','','',true);
+ $content = '<div align="center">'.$content.'</div>';
+ print_side_block($title, $content, NULL, NULL, NULL);
+ }
+ }
+ }
+}
+
+function upgrade_blocks_db($continueto) {
+/// This function upgrades the blocks tables, if necessary
+/// It's called from admin/index.php
+
+ global $CFG, $db;
+
+ require_once ("$CFG->dirroot/blocks/version.php"); // Get code versions
+
+ if (empty($CFG->blocks_version)) { // Blocks have never been installed.
+ $strdatabaseupgrades = get_string("databaseupgrades");
+ print_header($strdatabaseupgrades, $strdatabaseupgrades, $strdatabaseupgrades,
+ "", "", false, " ", " ");
+
+ $db->debug=true;
+ if (modify_database("$CFG->dirroot/blocks/db/$CFG->dbtype.sql")) {
+ $db->debug = false;
+ if (set_config("blocks_version", $blocks_version)) {
+ notify(get_string("databasesuccess"), "green");
+ notify(get_string("databaseupgradeblocks", "", $blocks_version));
+ print_continue($continueto);
+ exit;
+ } else {
+ error("Upgrade of blocks system failed! (Could not update version in config table)");
+ }
+ } else {
+ error("Blocks tables could NOT be set up successfully!");
+ }
+ }
+
+
+ if ($blocks_version > $CFG->blocks_version) { // Upgrade tables
+ $strdatabaseupgrades = get_string("databaseupgrades");
+ print_header($strdatabaseupgrades, $strdatabaseupgrades, $strdatabaseupgrades);
+
+ require_once ("$CFG->dirroot/blocks/db/$CFG->dbtype.php");
+
+ $db->debug=true;
+ if (blocks_upgrade($CFG->blocks_version)) {
+ $db->debug=false;
+ if (set_config("blocks_version", $blocks_version)) {
+ notify(get_string("databasesuccess"), "green");
+ notify(get_string("databaseupgradeblocks", "", $blocks_version));
+ print_continue($continueto);
+ exit;
+ } else {
+ error("Upgrade of blocks system failed! (Could not update version in config table)");
+ }
+ } else {
+ $db->debug=false;
+ error("Upgrade failed! See blocks/version.php");
+ }
+
+ } else if ($blocks_version < $CFG->blocks_version) {
+ notify("WARNING!!! The code you are using is OLDER than the version that made these databases!");
+ }
+}
+
+//This function finds all available blocks and install them
+//into blocks table or do all the upgrade process if newer
+function upgrade_blocks_plugins($continueto) {
+
+ global $CFG;
+
+ $blocktitles = array();
+ $invalidblocks = array();
+ $validblocks = array();
+ $notices = array();
+
+ //Count the number of blocks in db
+ $blockcount = count_records("blocks");
+ //If there isn't records. This is the first install, so I remember it
+ if ($blockcount == 0) {
+ $first_install = true;
+ } else {
+ $first_install = false;
+ }
+
+ $site = get_site();
+
+ if (!$blocks = get_list_of_plugins("blocks") ) {
+ error("No blocks installed!");
+ }
+
+ @include_once($CFG->dirroot."/blocks/moodleblock.class.php");
+ if(!class_exists('moodleblock')) {
+ error('Class MoodleBlock is not defined or file not found for /blocks/moodleblock.class.php');
+ }
+
+ foreach ($blocks as $blockname) {
+
+ if ($blockname == "NEWBLOCK" || $blockname == 'db') { // Someone has unzipped the template, ignore it
+ continue;
+ }
+
+ $fullblock = "$CFG->dirroot/blocks/$blockname";
+
+ if ( is_readable($fullblock."/block_".$blockname.".php")) {
+ include_once($fullblock."/block_".$blockname.".php");
+ } else {
+ $notices[] = "Block $blockname: ".$fullblock."/block_".$blockname.".php was not readable";
+ continue;
+ }
+
+ if ( is_readable("$fullblock/db/$CFG->dbtype.php")) {
+ include_once("$fullblock/db/$CFG->dbtype.php"); # defines upgrading function
+ } else {
+ $notices[] ="Block $blockname: $fullblock/db/$CFG->dbtype.php was not readable";
+ continue;
+ }
+
+ $classname = 'CourseBlock_'.$blockname;
+ if(!class_exists($classname)) {
+ $notices[] = "Block $blockname: $classname not implemented";
+ continue;
+ }
+
+ // Let's see if it supports some basic methods
+ $methods = get_class_methods($classname);
+ if(!in_array(strtolower($classname), $methods)) {
+ // No constructor
+ $notices[] = "Block $blockname: class does not have a constructor";
+ $invalidblocks[] = $blockname;
+ continue;
+ }
+
+ unset($block);
+
+ $blockobj = New $classname($site);
+
+ // Inherits from MoodleBlock?
+ if(!is_subclass_of($blockobj, "moodleblock")) {
+ $notices[] = "Block $blockname: class does not inherit from MoodleBlock";
+ continue;
+ }
+
+ // OK, it's as we all hoped. For further tests, the object will do them itself.
+ if(!$blockobj->_self_test()) {
+ $notices[] = "Block $blockname: self test failed";
+ continue;
+ }
+ $block->version = $blockobj->get_version();
+
+ if (!isset($block->version)) {
+ $notices[] = "Block $blockname: hasn't version support";
+ continue;
+ }
+
+ $block->name = $blockname; // The name MUST match the directory
+ $blocktitle = $blockobj->get_title();
+
+ if ($currblock = get_record("blocks", "name", $block->name)) {
+ if ($currblock->version == $block->version) {
+ // do nothing
+ } else if ($currblock->version < $block->version) {
+ if (empty($updated_blocks)) {
+ $strblocksetup = get_string("blocksetup");
+ print_header($strblocksetup, $strblocksetup, $strblocksetup, "", "", false, " ", " ");
+ }
+ print_heading("$block->name block needs upgrading");
+ $upgrade_function = $block->name."_upgrade";
+ if (function_exists($upgrade_function)) {
+ $db->debug=true;
+ if ($upgrade_function($currblock->version, $block)) {
+ $db->debug=false;
+ // OK so far, now update the blocks record
+ $block->id = $currblock->id;
+ if (! update_record("blocks", $block)) {
+ error("Could not update block $block->name record in blocks table!");
+ }
+ notify(get_string('blocksuccess', '', $blocktitle), 'green');
+ echo "<HR>";
+ } else {
+ $db->debug=false;
+ notify("Upgrading block $block->name from $currblock->version to $block->version FAILED!");
+ }
+ }
+ $updated_blocks = true;
+ } else {
+ error("Version mismatch: block $block->name can't downgrade $currblock->version -> $block->version !");
+ }
+
+ } else { // block not installed yet, so install it
+
+ // [pj] Normally this would be inline in the if, but we need to
+ // check for NULL (necessary for 4.0.5 <= PHP < 4.2.0)
+ $conflictblock = array_search($blocktitle, $blocktitles);
+ if($conflictblock !== false && $conflictblock !== NULL) {
+
+ // Duplicate block titles are not allowed, they confuse people
+ // AND PHP's associative arrays ;)
+ error('<strong>Naming conflict</strong>: block <strong>'.$block->name.'</strong> has the same title with an existing block, <strong>'.$conflictblock.'</strong>!');
+ }
+ if (empty($updated_blocks)) {
+ $strblocksetup = get_string("blocksetup");
+ print_header($strblocksetup, $strblocksetup, $strblocksetup, "", "", false, " ", " ");
+ }
+ print_heading($block->name);
+ $updated_blocks = true;
+ $db->debug = true;
+ set_time_limit(0); // To allow slow databases to complete the long SQL
+ if (modify_database("$fullblock/db/$CFG->dbtype.sql")) {
+ $db->debug = false;
+ if ($block->id = insert_record('blocks', $block)) {
+ notify(get_string('blocksuccess', '', $blocktitle), 'green');
+ echo "<HR>";
+ } else {
+ error("$block->name block could not be added to the block list!");
+ }
+ } else {
+ error("Block $block->name tables could NOT be set up successfully!");
+ }
+ }
+
+ $blocktitles[$block->name] = $blocktitle;
+ }
+
+ if(!empty($notices)) {
+ foreach($notices as $notice) {
+ notify($notice);
+ }
+ }
+
+ //Finally, if we are in the first_install, update every course blockinfo field with
+ //default values.
+ if ($first_install) {
+ //Iterate over each course
+ if ($courses = get_records("course")) {
+ foreach ($courses as $course) {
+ //Dependig of the format, insert some values
+ if ($course->format == "social") {
+ $blockinfo = blocks_get_default_blocks ($course->id, "participants,search_forums,calendar_month,calendar_upcoming,social_activities,recent_activity,admin,course_list");
+ } else {
+ //For topics and weeks formats (default built in the function)
+ $blockinfo = blocks_get_default_blocks($course->id);
+ }
+ if ($CFG->debug) {
+ echo 'Updating blockinfo for course: '.$course->shortname.'('.$blockinfo.')<br>';
+ }
+ }
+ }
+ }
+
+ if (!empty($updated_blocks)) {
+ print_continue($continueto);
+ die;
+ }
+}
+
+//This function returns the number of courses currently using the block
+function blocks_get_courses_using_block_by_id($blockid) {
+
+ $num = 0;
+
+ if ($courses = get_records("course")) {
+ foreach($courses as $course) {
+ $blocks = str_replace(":",",",$course->blockinfo);
+ $blocksarr = explode(",",$blocks);
+ if (block_find($blockid,$blocksarr,array())) {
+ $num++;
+ }
+ }
+ }
+
+ return $num;
+}
+
+//This function hides a block in all courses using it
+function blocks_update_every_block_by_id($blockid,$action) {
+
+ if ($courses = get_records("course")) {
+ foreach($courses as $course) {
+ //Calculate left and right blocks
+ $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);
+ }
+
+ switch($action) {
+ case 'show':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ $leftblocks[$block->position] = abs($leftblocks[$block->position]);
+ }
+ else {
+ $rightblocks[$block->position] = abs($rightblocks[$block->position]);
+ }
+ }
+ break;
+ case 'hide':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ $leftblocks[$block->position] = -abs($leftblocks[$block->position]);
+ }
+ else {
+ $rightblocks[$block->position] = -abs($rightblocks[$block->position]);
+ }
+ }
+ break;
+ case 'delete':
+ $block = block_find($blockid, $leftblocks, $rightblocks);
+ if($block !== false) {
+ if($block->side == BLOCK_LEFT) {
+ unset($leftblocks[$block->position]);
+ }
+ else {
+ unset($rightblocks[$block->position]);
+ }
+ }
+ break;
+ }
+ $course->blockinfo = implode(',', $leftblocks).':'.implode(',',$rightblocks);
+ set_field('course', 'blockinfo', $course->blockinfo, 'id', $course->id);
+ }
+ }
+}
+
+// [pj] I didn't like the block_get_X_by_Y() functions because
+// we should be able to do without them with clever coding,
+// so I set out to see if they could be removed somehow.
+// Only block_get_default_blocks() depends on them, and that
+// one is used nowhere at the moment. So I 'm commenting
+// them out until a use IS found.
+// [el] Uncommented to be used in the installation process, when
+// inserting new courses and when restoring courses. Perhaps
+// they can be modified, but previously related processes
+// will use them since now.
+
+//This function returns the id of the block, searching it by name
+function block_get_id_by_name ($blockname) {
+
+ if ($block = get_record("blocks","name",$blockname)) {
+ return $block->id;
+ } else {
+ return 0;
+ }
+}
+
+//This function returns the name of the block, searching it by id
+function block_get_name_by_id ($blockid) {
+
+ if ($block = get_record("blocks","id",$blockid)) {
+ return $block->name;
+ } else {
+ return NULL;
+ }
+}
+
+//This function return the necessary contents to update course->blockinfo
+//with default values. It accepts a list of block_names as parameter. They
+//will be converted to their blockids equivalent. If a course is specified
+//then the function will update the field too!
+
+function blocks_get_default_blocks ($courseid = NULL, $blocknames="participants,activity_modules,calendar_month,calendar_upcoming,search_forums,admin,course_list:news_items,recent_activity") {
+
+ //Calculate left and right blocks
+ $blocksn = $blocknames;
+ $delimpos = strpos($blocksn, ':');
+
+ if($delimpos === false) {
+ // No ':' found, we have all left blocks
+ $leftblocksn = explode(',', $blocksn);
+ $rightblocksn = array();
+ } else if($delimpos === 0) {
+ // ':' at start of string, we have all right blocks
+ $blocksn = substr($blocksn, 1);
+ $leftblocksn = array();
+ $rightblocksn = explode(',', $blocksn);
+ }
+ else {
+ // Both left and right blocks
+ $leftpartn = substr($blocksn, 0, $delimpos);
+ $rightpartn = substr($blocksn, $delimpos + 1);
+ $leftblocksn = explode(',', $leftpartn);
+ $rightblocksn = explode(',', $rightpartn);
+ }
+
+ //Now I have blocks separated
+
+ $leftblocks = array();
+ $rightblocks = array();
+
+ if ($leftblocksn) {
+ foreach($leftblocksn as $leftblockn) {
+ //Convert blockname to id
+ $leftblock = block_get_id_by_name($leftblockn);
+ if ($leftblock) {
+ //Check it's visible
+ if($block = get_record("blocks","id",$leftblock,"visible","1")) {
+ $leftblocks[] = $leftblock;
+ }
+ }
+ }
+ }
+
+ if ($rightblocksn) {
+ foreach($rightblocksn as $rightblockn) {
+ //Convert blockname to id
+ $rightblock = block_get_id_by_name($rightblockn);
+ if ($rightblock) {
+ //Check it's visible
+ if($block = get_record("blocks","id",$rightblock,"visible","1")) {
+ $rightblocks[] = $rightblock;
+ }
+ }
+ }
+ }
+
+ //Calculate the blockinfo field
+ if ($leftblocks || $rightblocks) {
+ $blockinfo = '';
+ if ($leftblocks) {
+ $blockinfo .= implode(",", $leftblocks);
+ }
+ if ($rightblocks) {
+ $blockinfo .= ':'.implode(",",$rightblocks);
+ }
+ } else {
+ $blockinfo = '';
+ }
+
+ //If a course has been specified, update it
+ if ($courseid) {
+ set_field('course', "blockinfo", $blockinfo, "id", $courseid);
+ }
+
+ //Returns the blockinfo
+ return $blockinfo;
+}
+
+?>
execute_sql("UPDATE {$CFG->prefix}course SET lang = 'cs' WHERE lang = 'cz'");
}
+ if ($oldversion < 2004041800) { /// Integrate Block System from contrib
+ table_column("course", "", "blockinfo", "varchar", "255", "", "", "not null", "modinfo");
+ }
+
return $result;
}
`format` varchar(10) NOT NULL default 'topics',
`showgrades` smallint(2) unsigned NOT NULL default '1',
`modinfo` longtext NOT NULL,
+ `blockinfo` varchar(255) NOT NULL default '',
`newsitems` smallint(5) unsigned NOT NULL default '1',
`teacher` varchar(100) NOT NULL default 'Teacher',
`teachers` varchar(100) NOT NULL default 'Teachers',
execute_sql("UPDATE {$CFG->prefix}course SET lang = 'cs' WHERE lang = 'cz'");
}
+ if ($oldversion < 2004041800) { /// Integrate Block System from contrib
+ table_column("course", "", "blockinfo", "varchar", "255", "", "", "not null", "modinfo");
+ }
+
return $result;
}
format varchar(10) NOT NULL default 'topics',
showgrades integer NOT NULL default '1',
modinfo text NOT NULL default '',
+ blockinfo varchar(255) NOT NULL default '',
newsitems integer NOT NULL default '1',
teacher varchar(100) NOT NULL default 'Teacher',
teachers varchar(100) NOT NULL default 'Teachers',
// database to determine whether upgrades should
// be performed (see lib/db/*.php)
-$version = 2004040500; // The current version is a date (YYYYMMDDXX)
+$version = 2004041800; // The current version is a date (YYYYMMDDXX)
$release = "1.3 development"; // User-friendly version number