cvsimport fixups -- cvshead had strayed from upstream
authorMartin Langhoff <martin@catalyst.net.nz>
Thu, 4 Jan 2007 00:15:04 +0000 (13:15 +1300)
committerMartin Langhoff <martin@catalyst.net.nz>
Thu, 4 Jan 2007 00:15:04 +0000 (13:15 +1300)
171 files changed:
admin/config.php [deleted file]
admin/configvars.php [deleted file]
admin/index.php
admin/roles/assign.php
admin/uploaduser.php
admin/utfdbmigrate.html [deleted file]
admin/utfdbmigrate.php [deleted file]
admin/xmldb/actions/get_db_directories/get_db_directories.class.php
backup/backuplib.php
backup/db/migrate2utf8.php [deleted file]
backup/db/migrate2utf8.xml [deleted file]
blocks/admin/block_admin.php
blocks/db/migrate2utf8.php [deleted file]
blocks/db/migrate2utf8.xml [deleted file]
blocks/online_users/block_online_users.php
blocks/pagedemo.php [deleted file]
blocks/quiz_results/block_quiz_results.php
blocks/rss_client/db/migrate2utf8.php [deleted file]
blocks/rss_client/db/migrate2utf8.xml [deleted file]
blog/header.php
blog/index.php
blog/lib.php
blog/rsslib.php
calendar/event.php
course/groups.php
course/lib.php
doc/COPYRIGHT.txt [deleted file]
doc/contents.php [deleted file]
doc/docstyles.css [deleted file]
doc/index.php [deleted file]
doc/install.html [deleted file]
doc/top.php [deleted file]
doc/view.php [deleted file]
enrol/authorize/db/migrate2utf8.xml [deleted file]
group/assign.php [new file with mode: 0644]
group/db/dbbasicgrouplib.php
group/db/dbgroupinglib.php
group/db/dbsetup.php
group/db/install.xml [new file with mode: 0644]
group/db/mysql.sql
group/db/postgres7.sql
group/db/upgrade.php [new file with mode: 0644]
group/group.php [new file with mode: 0644]
group/grouping.php [new file with mode: 0644]
group/install.php [deleted file]
group/install.sql [deleted file]
group/lib.php [new file with mode: 0644]
group/lib/basicgrouplib.php
group/lib/groupinglib.php
group/lib/legacylib.php
group/lib/utillib.php
group/simpletest/test_basicgrouplib.php
group/simpletest/test_groupinglib.php
group/version.php [new file with mode: 0644]
lang/en_utf8/group.php
lang/en_utf8/help/lesson/deleteattempts.html [new file with mode: 0644]
lib/accesslib.php
lib/adodb/adodb-connection.inc.php [deleted file]
lib/adodb/adodb-cryptsession.php [deleted file]
lib/adodb/adodb-recordset.inc.php [deleted file]
lib/adodb/adodb-session-clob.php [deleted file]
lib/adodb/adodb-session.php [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/Changelog [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/INSTALL [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/LICENSE [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/README [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/adodb-xmlschema.inc.php [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/blank.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/classtrees_xmlschema.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/elementindex.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/elementindex_xmlschema.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/errors.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/index.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/li_xmlschema.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/media/stylesheet.css [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/packages.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/xmlschema/_adodb-xmlschema_php.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/xmlschema/adoSchema.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/docs/xmlschema/package_xmlschema.html [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/example.php [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/example.xml [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/xmlschema.dtd [deleted file]
lib/adodb/adodb-xmlschema-0.0.1-snap20030511/xmlschema.html [deleted file]
lib/adodb/adodb-xmlschema.inc.php
lib/adodb/adodb-xmlschema03.inc.php
lib/adodb/crypt.inc.php [deleted file]
lib/adodb/docs-adodb.htm [deleted file]
lib/adodb/docs-datadict.htm [deleted file]
lib/adodb/docs-perf.htm [deleted file]
lib/adodb/docs-session.htm [deleted file]
lib/adodb/pear/Auth/Container/ADOdb.php [deleted file]
lib/adodb/pear/readme.Auth.txt [deleted file]
lib/adodb/readme.htm [deleted file]
lib/adodb/tips_portable_sql.htm [deleted file]
lib/adodb/tute.htm [deleted file]
lib/datalib.php
lib/db/install.xml
lib/db/migrate2utf8.php [deleted file]
lib/db/migrate2utf8.xml [deleted file]
lib/db/mysql.sql
lib/db/postgres7.sql
lib/deprecatedlib.php
lib/editor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
lib/editor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
lib/editor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
lib/editor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js
lib/editor/tinymce/jscripts/tiny_mce/tiny_mce_gzip.php
lib/editor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
lib/editor/tinymce/jscripts/tiny_mce/utils/form_utils.js
lib/editor/tinymce/jscripts/tiny_mce/utils/mclayer.js
lib/editor/tinymce/jscripts/tiny_mce/utils/mctabs.js
lib/editor/tinymce/jscripts/tiny_mce/utils/validate.js
lib/filelib.php
lib/pear/HTML/QuickForm/Rule/Compare.php
lib/soap/nusoap.php
mod/assignment/db/migrate2utf8.php [deleted file]
mod/assignment/db/migrate2utf8.xml [deleted file]
mod/assignment/index.php
mod/chat/db/migrate2utf8.php [deleted file]
mod/chat/db/migrate2utf8.xml [deleted file]
mod/chat/gui_header_js/index.php
mod/chat/gui_sockets/index.php
mod/choice/db/migrate2utf8.php [deleted file]
mod/choice/db/migrate2utf8.xml [deleted file]
mod/data/db/migrate2utf8.php [deleted file]
mod/data/db/migrate2utf8.xml [deleted file]
mod/data/index.php
mod/exercise/db/migrate2utf8.php [deleted file]
mod/exercise/db/migrate2utf8.xml [deleted file]
mod/exercise/locallib.php
mod/exercise/view.php
mod/forum/db/migrate2utf8.php [deleted file]
mod/forum/db/migrate2utf8.xml [deleted file]
mod/forum/discuss.php
mod/forum/view.php
mod/glossary/db/migrate2utf8.php [deleted file]
mod/glossary/db/migrate2utf8.xml [deleted file]
mod/hotpot/db/migrate2utf8.php [deleted file]
mod/hotpot/db/migrate2utf8.xml [deleted file]
mod/hotpot/report.php
mod/journal/db/migrate2utf8.php [deleted file]
mod/journal/db/migrate2utf8.xml [deleted file]
mod/journal/lib.php
mod/journal/view.php
mod/label/db/migrate2utf8.php [deleted file]
mod/label/db/migrate2utf8.xml [deleted file]
mod/lams/db/migrate2utf8.php [deleted file]
mod/lams/db/migrate2utf8.xml [deleted file]
mod/lesson/db/migrate2utf8.php [deleted file]
mod/lesson/db/migrate2utf8.xml [deleted file]
mod/lesson/mod_form.php
mod/quiz/db/migrate2utf8.php [deleted file]
mod/quiz/db/migrate2utf8.xml [deleted file]
mod/quiz/lib.php
mod/quiz/report/analysis/report.php
mod/quiz/report/overview/report.php
mod/resource/db/migrate2utf8.php [deleted file]
mod/resource/db/migrate2utf8.xml [deleted file]
mod/scorm/db/migrate2utf8.php [deleted file]
mod/scorm/db/migrate2utf8.xml [deleted file]
mod/survey/db/migrate2utf8.php [deleted file]
mod/survey/db/migrate2utf8.xml [deleted file]
mod/survey/lib.php
mod/wiki/db/migrate2utf8.php [deleted file]
mod/wiki/db/migrate2utf8.xml [deleted file]
mod/wiki/lib.php
mod/workshop/db/migrate2utf8.php [deleted file]
mod/workshop/db/migrate2utf8.xml [deleted file]
user/index.php
user/tabs.php
user/view.php

diff --git a/admin/config.php b/admin/config.php
deleted file mode 100644 (file)
index fd1694b..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-<?php  // $Id$
-       // config.php - allows admin to edit all configuration variables
-
-    require_once('../config.php');
-
-    $focus = '';
-
-    if ($site = get_site()) {   // If false then this is a new installation
-        require_login();
-        require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID));
-    }
-
-/// This is to overcome the "insecure forms paradox"
-    if (isset($secureforms) and $secureforms == 0) {
-        $match = 'nomatch';
-    } else {
-        $match = '';
-    }
-
-/// If data submitted, then process and store.
-
-    if ($config = data_submitted($match)) {  
-
-        if (!empty($USER->id)) {            // Additional identity check
-            if (!confirm_sesskey()) {
-                error(get_string('confirmsesskeybad', 'error'));
-            }
-        }
-
-        validate_form($config, $err);
-
-        if (count($err) == 0) {
-            foreach ($config as $name => $value) {
-                if ($name == "sessioncookie") {
-                    $value = eregi_replace("[^a-zA-Z0-9_]", "", $value);
-                }
-                if ($name == "defaultallowedmodules") {
-                    $value = implode(',',$value);
-                }
-                if ($name == 'hiddenuserfields') {
-                    if (in_array('none', $value)) {
-                        $value = '';
-                    } else {
-                        $value = implode(',',$value);
-                    }
-                }
-                if ($name == "locale") {
-                    $value = trim($value);
-                }
-                $conf = new object();
-                $conf->name  = $name;
-                $conf->value = $value;
-                if ($current = get_record('config', 'name', $name)) {
-                    $conf->id = $current->id;
-                    if (! update_record('config', $conf)) {
-                        error("Error: Could not update $name to $value");
-                    }
-                } else {
-                    if (! insert_record('config', $conf)) {
-                        error("Error: could not add new variable $name !");
-                    }
-                }
-            }
-            redirect('index.php');
-            exit;
-
-        } else {
-            foreach ($err as $key => $value) {
-                $focus = "form.$key";
-            }
-        }
-    }
-
-/// Otherwise fill and print the form.
-
-    if (empty($config)) {
-        $config = $CFG;
-    }
-
-    $sesskey = !empty($USER->id) ? $USER->sesskey : '';
-
-
-    $stradmin = get_string('administration');
-    $strconfiguration = get_string('configuration');
-    $strconfigvariables = get_string('configvariables', 'admin');
-
-    if ($site) {
-        print_header("$site->shortname: $strconfigvariables", $site->fullname,
-                      "<a href=\"index.php\">$stradmin</a> -> ".
-                      "<a href=\"configure.php\">$strconfiguration</a> -> $strconfigvariables", $focus);
-        print_heading($strconfigvariables);
-    } else {
-        print_header();
-        print_heading($strconfigvariables);
-        print_simple_box(get_string('configintro', 'admin'), 'center', "50%");
-        echo '<br />';
-    }
-
-
-
-/// Get all the configuration fields and helptext
-    require('configvars.php');
-
-/// Cycle through the sections to get the sectionnames
-    $linktext = '';
-    foreach($configvars as $sectionname=>$section) {
-        if ($linktext !== '') {
-            $linktext .= ' | ';
-        }
-        $linktext .= '<a href="#configsection'.$sectionname.'">'.get_string('configsection'.$sectionname, 'admin').'</a>';
-    }
-        
-    echo "<center>$linktext</center>\n";
-
-    
-    echo '<form method="post" action="config.php" name="form">';
-    echo '<center><input type="submit" value="'.get_string('savechanges').'" /></center>';
-
-/// Cycle through each section of the configuration
-    foreach ($configvars as $sectionname=>$section) {
-
-        print_heading('<a name="configsection'.$sectionname.'"></a>'.get_string('configsection'.$sectionname, 'admin'));
-
-        $table = NULL;
-        $table->data = array();
-        foreach ($section as $configvariable=>$configobject) {
-            $table->data[] = array ( $configvariable.': ',
-                                     $configobject->field
-                                   );
-            if ($configobject->display_warning()) {
-                $table->data[] = array ( '&nbsp;',
-                                         '<span class="configwarning">'.$configobject->warning.'</span>'
-                                       );
-            }
-            $table->data[] = array ( '&nbsp;',
-                                     '<span class="confighelp">'.$configobject->help.'</span>'
-                                   );
-            $table->align = array ('right', 'left');
-        }
-        print_table($table);
-
-    }
-    echo '<center>';
-    echo '<input type="hidden" name="sesskey" value="'.$sesskey.'" />';
-    echo '<input type="submit" value="'.get_string('savechanges').'" />';
-    echo '</center>';
-                
-    echo '</form>';
-    
-
-
-    
-
-    /// Lock some options
-
-    $httpsurl = str_replace('http://', 'https://', $CFG->wwwroot);
-    if ($httpsurl != $CFG->wwwroot) {
-        if (ini_get('allow_url_fopen')) {
-            if ((($fh = @fopen($httpsurl, 'r')) == false) and ($config->loginhttps == 0)) {
-                echo '<script type="text/javascript">'."\n";
-                echo '<!--'."\n";
-                echo "eval('document.form.loginhttps.disabled=true');\n";
-                echo '-->'."\n";
-                echo '</script>'."\n";
-            }
-        }
-    }
-
-
-    if ($site) {
-        print_footer();
-    }
-
-    exit;
-
-/// Functions /////////////////////////////////////////////////////////////////
-
-function validate_form(&$form, &$err) {
-
-    // Currently no checks are needed ...
-
-    return true;
-}
-
-?>
diff --git a/admin/configvars.php b/admin/configvars.php
deleted file mode 100644 (file)
index b7fb49f..0000000
+++ /dev/null
@@ -1,660 +0,0 @@
-<?php // $Id$
-      // Shane Elliott
-defined('MOODLE_INTERNAL') or die('Direct access to this script is forbidden.');
-
-/// Add new sitewide configuration variables to this file.
-
-
-/// $configvars is parsed by config.php
-/// It is an array of arrays of objects
-/// $configvars[sectionname][configvariablename] = configvar object
-    $configvars = array();
-
-
-/// no, yes strings and menu options are used in a number of places
-/// so we define them here to save time on repeatedly calling
-/// get_string()
-    $stryes = get_string('yes');
-    $strno  = get_string('no');
-
-    $noyesoptions[0] = $strno;
-    $noyesoptions[1] = $stryes;
-
-
-
-/// A class to hold the configurable information
-/// $field   - the html code for the form field
-/// $help    - help text for the field
-/// $warning - optional warning text to be displayed
-/// method display_warning() - a generic function that can be used in an extended class
-///     e.g. enablerssfeeds
-class configvar {
-
-    var $field;
-    var $help;
-    var $warning;
-
-    function configvar($help, $field, $warning='') {
-        $this->help    = $help;
-        $this->field   = $field;
-        $this->warning = $warning;
-    }
-
-    function display_warning() {
-        return false;
-    }
-}
-
-
-
-
-
-////////////////////////////////////////////////////////////////////
-/// Miscellaneous config variables
-////////////////////////////////////////////////////////////////////
-    $misc = array();
-
-
-/// maxeditingtime
-    unset($options);
-    $options[3600] = get_string('numminutes', '', 60);
-    $options[2700] = get_string('numminutes', '', 45);
-    $options[1800] = get_string('numminutes', '', 30);
-    $options[900]  = get_string('numminutes', '', 15);
-    $options[300]  = get_string('numminutes', '', 5);
-    $options[60]   = get_string('numminutes', '', 1);
-
-    $misc['maxeditingtime'] = new configvar (get_string('configmaxeditingtime', 'admin'),
-        choose_from_menu ($options, 'maxeditingtime', $config->maxeditingtime, '', '', '', true) );
-
-/// debug
-    unset($options);
-    $options[5]  = $strno;
-    $options[15] = $stryes;
-
-    $misc['debug'] = new configvar (get_string('configdebug', 'admin'),
-        choose_from_menu ($options, 'debug', $config->debug, '', '', '', true) );
-
-    $misc['perfdebug'] = new configvar (get_string('configperfdebug', 'admin'),
-        choose_from_menu ($options, 'perfdebug', $config->perfdebug, '', '', '', true) );
-
-/// enablerssfeeds
-class configvarrss extends configvar {
-    function display_warning() {
-        return (!function_exists('utf8_encode'));
-    }
-}
-
-    $misc['enablerssfeeds'] = new configvarrss (get_string('configenablerssfeeds', 'admin'),
-        choose_from_menu ($noyesoptions, 'enablerssfeeds', $config->enablerssfeeds, '', '', '', true),
-        '<font color="red"> You need to add XML support to your PHP installation.</font>' );
-
-    $misc['mymoodleredirect'] = new configvar (get_string('configmymoodleredirect','admin'),
-        choose_from_menu($noyesoptions,'mymoodleredirect',$config->mymoodleredirect,'','','',true));
-
-    unset($options);
-    $options[5] = get_string('worldblogs','blog');
-    $options[4] = get_string('siteblogs','blog');
-    $options[3] = get_string('courseblogs','blog');
-    $options[2] = get_string('groupblogs','blog');
-    $options[1] = get_string('personalblogs','blog');
-    $options[0] = get_string('disableblogs','blog');
-
-    $misc['bloglevel'] = new configvar (get_string('configbloglevel', 'admin'),
-        choose_from_menu ($options, 'bloglevel', $config->bloglevel,'','','',true));
-
-////////////////////////////////////////////////////////////////////
-/// OPERATING SYSTEM config variables
-////////////////////////////////////////////////////////////////////
-    $operatingsystem = array();
-
-/// gdversion
-    unset($options);
-    $options[0] = get_string('gdnot');
-    $options[1] = get_string('gd1');
-    $options[2] = get_string('gd2');
-
-    $installed  = check_gd_version();
-
-    $operatingsystem['gdversion'] = new configvar (get_string('configgdversion', 'admin'),
-        choose_from_menu ($options, 'gdversion', $installed, '', '', '', true) );
-
-/// dbsessions
-    $operatingsystem['dbsessions'] = new configvar (get_string('configdbsessions', 'admin'),
-        choose_from_menu ($noyesoptions, 'dbsessions', $config->dbsessions, '', '', '', true) );
-
-/// sessiontimeout
-    unset($options);
-    $options[14400] = get_string('numhours', '', 4);
-    $options[10800] = get_string('numhours', '', 3);
-    $options[7200]  = get_string('numhours', '', 2);
-    $options[5400]  = get_string('numhours', '', '1.5');
-    $options[3600]  = get_string('numminutes', '', 60);
-    $options[2700]  = get_string('numminutes', '', 45);
-    $options[1800]  = get_string('numminutes', '', 30);
-    $options[900]   = get_string('numminutes', '', 15);
-    $options[300]   = get_string('numminutes', '', 5);
-
-    $operatingsystem['sessiontimeout'] = new configvar (get_string('configsessiontimeout', 'admin'),
-        choose_from_menu ($options, 'sessiontimeout', $config->sessiontimeout, '', '', '', true) );
-
-/// sessioncookie
-    $operatingsystem['sessioncookie'] = new configvar (get_string('configsessioncookie', 'admin'),
-        '<input name="sessioncookie" type="text" size="10" value="'.s($config->sessioncookie).'" alt="sessioncookie" />' );
-    $operatingsystem['sessioncookiepath'] = new configvar (get_string('configsessioncookiepath', 'admin'),
-        '<input name="sessioncookiepath" type="text" size="10" value="'.s($config->sessioncookiepath).'" alt="sessioncookiepath" />' );
-
-/// zip
-    $operatingsystem['zip'] = new configvar (get_string('configzip', 'admin'),
-        '<input name="zip" type="text" size="30" value="'.s($config->zip).'" alt="zip" />' );
-
-/// unzip
-    $operatingsystem['unzip'] = new configvar (get_string('configunzip', 'admin'),
-        '<input name="unzip" type="text" size="30" value="'.s($config->unzip).'" alt="unzip" />' );
-
-    $operatingsystem['pathtodu'] = new configvar(get_string('configpathtodu', 'admin'),
-        '<input name="pathtodu" type="text" size="30" value="'.s($config->pathtodu).'" alt="pathtodu" />');                                                
-
-/// slasharguments
-    unset($options);
-    $options[0] = "file.php?file=/1/pic.jpg";
-    $options[1] = "file.php/1/pic.jpg";
-
-    $operatingsystem['slasharguments'] = new configvar (get_string('configslasharguments', 'admin'),
-        choose_from_menu ($options, 'slasharguments', $config->slasharguments, '', '', '', true) );
-
-/// proxyhost
-    $operatingsystem['proxyhost'] = new configvar (get_string('configproxyhost', 'admin'),
-        '<input name="proxyhost" type="text" size="30" value="'.s($config->proxyhost).'" alt="proxyhost" />' );
-
-/// proxyport
-    $operatingsystem['proxyport'] = new configvar ('',
-        '<input name="proxyport" type="text" size="5" value="'.s($config->proxyport).'" alt="proxyport" />' );
-
-
-
-////////////////////////////////////////////////////////////////////
-/// PERMISSIONS config variables
-////////////////////////////////////////////////////////////////////
-    $permissions = array();
-
-/// teacherassignteachers
-    $permissions['teacherassignteachers'] = new configvar (get_string('configteacherassignteachers', 'admin'),
-        choose_from_menu ($noyesoptions, 'teacherassignteachers', $config->teacherassignteachers, '', '', '', true) );
-
-/// allowunenroll
-    $permissions['allowunenroll'] = new configvar (get_string('configallowunenroll', 'admin'),
-        choose_from_menu ($noyesoptions, 'allowunenroll', $config->allowunenroll, '', '', '', true) );
-
-/// allusersaresitestudents
-    $permissions['allusersaresitestudents'] = new configvar (get_string('configallusersaresitestudents', 'admin'),
-        choose_from_menu ($noyesoptions, 'allusersaresitestudents', $config->allusersaresitestudents, '', '', '', true) );
-
-/// showsiteparticipantslist
-    unset($options);
-    $options[0]  = get_string('siteteachers');
-    $options[1]  = get_string('allteachers');
-    $options[2]  = get_string('studentsandteachers');
-
-    $permissions['showsiteparticipantslist'] = new configvar (get_string('configshowsiteparticipantslist', 'admin'),
-        choose_from_menu ($options, 'showsiteparticipantslist', $config->showsiteparticipantslist, '', '', '', true) );
-
-/// forcelogin
-    $permissions['forcelogin'] = new configvar (get_string('configforcelogin', 'admin'),
-        choose_from_menu ($noyesoptions, 'forcelogin', $config->forcelogin, '', '', '', true) );
-
-/// forceloginforprofiles
-   $permissions['forceloginforprofiles'] = new configvar (get_string('configforceloginforprofiles', 'admin'),
-        choose_from_menu ($noyesoptions, 'forceloginforprofiles', $config->forceloginforprofiles, '', '', '', true) );
-
-/// opentogoogle
-    $permissions['opentogoogle'] = new configvar (get_string('configopentogoogle', 'admin'),
-        choose_from_menu ($noyesoptions, 'opentogoogle', $config->opentogoogle, '', '', '', true) );
-
-/// maxbytes
-    $options = get_max_upload_sizes();
-
-    $permissions['maxbytes'] = new configvar (get_string('configmaxbytes', 'admin'),
-        choose_from_menu ($options, 'maxbytes', $config->maxbytes, '', '', 0, true) );
-
-/// messaging
-    $permissions['messaging'] = new configvar (get_string('configmessaging', 'admin'),
-        choose_from_menu ($noyesoptions, 'messaging', $config->messaging, '', '', '', true) );
-
-/// allowobjectembed
-    $permissions['allowobjectembed'] = new configvar (get_string('configallowobjectembed', 'admin'),
-        choose_from_menu ($noyesoptions, 'allowobjectembed', $config->allowobjectembed, '', '', '', true) );
-
-/// enabletrusttext
-    $permissions['enabletrusttext'] = new configvar (get_string('configenabletrusttext', 'admin'),
-        choose_from_menu ($noyesoptions, 'enabletrusttext', $config->enabletrusttext, '', '', '', true) );
-
-    unset($options);
-    $options['none'] = 'No courses';
-    $options['all'] = 'All courses';
-    $options['requested'] = 'Requested courses';
-
-    $permissions['restrictmodulesfor'] = new configvar (get_string('configrestrictmodulesfor','admin'),
-   ' <script language="JavaScript">
-    function togglemodules(index) {
-        if (index == 0) {
-            document.getElementById(\'allowedmodules\').disabled=true;
-        }
-        else {
-            document.getElementById(\'allowedmodules\').disabled=false;
-        }
-    }
-    </script>'.
-        choose_from_menu($options,'restrictmodulesfor',$config->restrictmodulesfor,'','togglemodules(this.selectedIndex);','',true) );
-
-    $permissions['restrictbydefault'] = new configvar (get_string('configrestrictbydefault','admin'),
-        choose_from_menu($noyesoptions, 'restrictbydefault',$config->restrictbydefault,'','','',true) );
-
-    $allowstr = '<select name="defaultallowedmodules[]" id="allowedmodules" multiple="multiple" size="10"'.((empty($config->restrictmodulesfor)) ? "disabled=\"disabled\"" : "").'>';
-
-    $allowedmodules = array();
-    if (!empty($config->defaultallowedmodules)) {
-        $allowedmodules = explode(',',$config->defaultallowedmodules);
-    }
-
-//  On a fresh install of Moodle, this could be empty; prevent a warning on the following loop.
-    if (!$mods = get_records("modules")) {
-        $mods = array();
-    }
-    $s = "selected=\"selected\"";
-    $allowstr .= '<option value="0" '.((empty($allowedmodules)) ? $s : '').'>'.get_string('allownone').'</option>'."\n";
-    foreach ($mods as $mod) {
-        $selected = "";
-        if (in_array($mod->id,$allowedmodules)) 
-            $selected = $s;
-        $allowstr .= '<option '.$selected.' value="'.$mod->id.'">'.$mod->name.'</option>'."\n";
-    }  
-    $allowstr .= '</select>';
-
-    $permissions['defaultallowedmodules'] = new configvar (get_string('configdefaultallowedmodules','admin'),$allowstr);
-
-
-/// course requests
-    $reqcourse['enablecourserequests'] = new configvar (get_string('configenablecourserequests', 'admin'),
-        choose_from_menu ($noyesoptions,'enablecourserequests',$config->enablecourserequests,'','','',true) );
-
-/// default category for course requests
-    require_once($CFG->dirroot.'/course/lib.php');
-    $reqcourse['defaultrequestedcategory'] = new configvar (get_string('configdefaultrequestedcategory', 'admin'),
-        choose_from_menu (make_categories_options(), 'defaultrequestedcategory',$config->defaultrequestedcategory,'','','',true) );
-
-    $reqcourse['requestedteachername'] = new configvar (get_string('configrequestedteachername','admin'),
-        '<input type="text" name="requestedteachername" size="20" maxlength="100" value="'.s($config->requestedteachername).'" />');
-
-    $reqcourse['requestedteachersname'] = new configvar (get_string('configrequestedteachersname','admin'),
-        '<input type="text" name="requestedteachersname" size="20" maxlength="100" value="'.s($config->requestedteachersname).'" />');
-
-    $reqcourse['requestedstudentname'] = new configvar (get_string('configrequestedstudentname','admin'),
-        '<input type="text" name="requestedstudentname" size="20" maxlength="100" value="'.s($config->requestedstudentname).'" />');
-
-    $reqcourse['requestedstudentsname'] = new configvar (get_string('configrequestedstudentsname','admin'),
-        '<input type="text" name="requestedstudentsname" size="20" maxlength="100" value="'.s($config->requestedstudentsname).'" />');
-
-////////////////////////////////////////////////////////////////////
-/// INTERFACE config variables
-////////////////////////////////////////////////////////////////////
-    $interface = array();
-
-/// language settings
-    $interface['lang'] = new configvar ( get_string('configlang', 'admin'),
-        choose_from_menu(get_list_of_languages(), 'lang', $config->lang, '', '', '', true) );
-
-/// language menu
-    $interface['langmenu'] = new configvar ( get_string('configlangmenu', 'admin'),
-        choose_from_menu($noyesoptions, 'langmenu', $config->langmenu, '', '', '', true) );
-
-/// language list
-    $interface['langlist'] = new configvar ( get_string('configlanglist', 'admin'),
-        '<input name="langlist" type="text" size="60" value="'.s($config->langlist).'" alt="langlist" />' );
-
-/// language menu
-    $interface['langcache'] = new configvar ( get_string('configlangcache', 'admin'),
-        choose_from_menu($noyesoptions, 'langcache', $config->langcache, '', '', '', true) );
-
-/// locale
-    $interface['locale'] = new configvar ( get_string('configlocale', 'admin'),
-        '<input name="locale" type="text" size="15" value="'.s($config->locale).'" alt="locale" />' );
-
-/// docroot
-    $interface['docroot'] = new configvar ( get_string('configdocroot', 'admin'),
-        '<input name="docroot" type="text" size="60" value="'.s($config->docroot).'" alt="docroot" />' );
-
-/// doctonewwindow
-    $interface['doctonewwindow'] = new configvar ( get_string('configdoctonewwindow', 'admin'),
-        choose_from_menu($noyesoptions, 'doctonewwindow', $config->doctonewwindow, '', '', '', true) );
-
-/// timezone
-    $interface['timezone'] = new configvar ( get_string('configtimezone', 'admin'),
-        choose_from_menu (get_list_of_timezones(), 'timezone', $config->timezone, get_string('serverlocaltime'), '', '99', true ) );
-
-/// country
-    $interface['country'] = new configvar ( get_string('configcountry', 'admin'),
-        choose_from_menu (get_list_of_countries(), 'country', $config->country, get_string('selectacountry'), '', 0, true) );
-
-/// framename
-    if (empty($config->framename)) {
-        $config->framename = "_top";
-    }
-
-    $interface['framename'] = new configvar (get_string('configframename', 'admin'),
-        '<input name="framename" type="text" size="15" value="'.s($config->framename).'" alt="framename" />' );
-
-/// language list
-    $interface['themelist'] = new configvar ( get_string('configthemelist', 'admin'),
-        '<input name="themelist" type="text" size="60" value="'.s($config->themelist).'" alt="themelist" />' );
-
-/// user themes
-    $interface['allowuserthemes'] = new configvar (get_string('configallowuserthemes', 'admin'),
-        choose_from_menu ($noyesoptions, 'allowuserthemes', $config->allowuserthemes, '', '', '', true) );
-
-/// course themes
-    $interface['allowcoursethemes'] = new configvar (get_string('configallowcoursethemes', 'admin'),
-        choose_from_menu ($noyesoptions, 'allowcoursethemes', $config->allowcoursethemes, '', '', '', true) );
-
-/// allowuserblockhiding
-    $interface['allowuserblockhiding'] = new configvar (get_string('configallowuserblockhiding', 'admin'),
-        choose_from_menu ($noyesoptions, 'allowuserblockhiding', $config->allowuserblockhiding, '', '', '', true) );
-
-/// showblocksonmodpages
-    $interface['showblocksonmodpages'] = new configvar (get_string('configshowblocksonmodpages', 'admin'),
-        choose_from_menu ($noyesoptions, 'showblocksonmodpages', $config->showblocksonmodpages, '', '', '', true) );
-
-
-/// tabselectedtofront
-    $interface['tabselectedtofront'] = new configvar (get_string('tabselectedtofront', 'admin'),
-        choose_from_menu ($noyesoptions, 'tabselectedtofront', $config->tabselectedtofront, '', '', '', true) );
-
-
-
-////////////////////////////////////////////////////////////////////
-/// USER config variables
-////////////////////////////////////////////////////////////////////
-    $user = array();
-
-/// sitepolicy
-    $user['sitepolicy'] = new configvar (get_string('configsitepolicy', 'admin'),
-        '<input type="text" name="sitepolicy" size="60" value="'.$config->sitepolicy.'" alt="sitepolicy" />' );
-
-
-/// fullnamedisplay
-    unset($options);
-    $options['language']  = get_string('language');
-    $options['firstname lastname']  = get_string('firstname') . ' + ' . get_string('lastname');
-    $options['lastname firstname']  = get_string('lastname') . ' + ' . get_string('firstname');
-    $options['firstname']  = get_string('firstname');
-
-    $user['fullnamedisplay'] = new configvar (get_string('configfullnamedisplay', 'admin'),
-        choose_from_menu ($options, 'fullnamedisplay', $config->fullnamedisplay, '', '', '', true) );
-
-/// extendedusernamechars
-    $user['extendedusernamechars'] = new configvar (get_string('configextendedusernamechars', 'admin'),
-        choose_from_menu ($noyesoptions, 'extendedusernamechars', $config->extendedusernamechars, '', '', '', true) );
-
-/// autologinguests
-    $user['autologinguests'] = new configvar (get_string('configautologinguests', 'admin'),
-        choose_from_menu ($noyesoptions, 'autologinguests', $config->autologinguests, '', '', '', true) );
-
-/// hiddenuserfields
-    $fields = array('none', 'description', 'city', 'country', 'webpage', 'icqnumber', 'skypeid', 'yahooid', 'aimid', 'msnid', 'lastaccess');
-    if (empty($config->hiddenuserfields)) {
-        $config->hiddenuserfields = 'none';
-    }
-    $configfields = array_flip(explode(',', $config->hiddenuserfields));
-    $fieldoptions = '';
-    foreach ($fields as $value) {
-        $fieldoptions .= '<option value="'.$value.'"';
-        if (isset($configfields[$value])) {
-            $fieldoptions .= ' selected="selected"';
-        }
-        $fieldoptions .= '>'.get_string($value).'</option>';
-    }
-
-    $user['hiddenuserfields'] = new configvar (get_string('confighiddenuserfields', 'admin'),
-        '<select id="menuhiddenuserfields" name="hiddenuserfields[]" size="10" multiple="multiple">'.$fieldoptions.'</select>' );
-
-
-
-
-////////////////////////////////////////////////////////////////////
-/// SECURITY config variables
-////////////////////////////////////////////////////////////////////
-    $security = array();
-
-/// displayloginfailures
-    unset($options);
-    $options[''] = get_string('nobody');
-    $options['admin'] = get_string('administrators');
-    $options['teacher'] = get_string('administratorsandteachers');
-    $options['everybody'] = get_string('everybody');
-
-    $security['displayloginfailures'] = new configvar (get_string('configdisplayloginfailures', 'admin'),
-        choose_from_menu($options, 'displayloginfailures', $config->displayloginfailures, '', '', '', true) );
-
-/// notifyloginfailures
-    unset($options);
-    $options[''] = get_string('nobody');
-    $options['mainadmin'] = get_string('administrator');
-    $options['alladmins'] = get_string('administratorsall');
-
-    $security['notifyloginfailures'] = new configvar (get_string('confignotifyloginfailures', 'admin'),
-        choose_from_menu($options, 'notifyloginfailures', $config->notifyloginfailures, '', '', '', true) );
-
-/// notifyloginthreshold
-    unset($options);
-    for ($i=1; $i<=100; $i++) {
-        $options[$i] = "$i";
-    }
-
-    $security['notifyloginthreshold'] = new configvar (get_string('confignotifyloginthreshold', 'admin'),
-        choose_from_menu($options, 'notifyloginthreshold', $config->notifyloginthreshold, '', '', '', true) );
-
-/// secureforms
-    $security['secureforms'] = new configvar (get_string('configsecureforms', 'admin'),
-        choose_from_menu ($noyesoptions, 'secureforms', $config->secureforms, '', '', '', true) );
-
-/// loginhttps
-    $security['loginhttps'] = new configvar (get_string('configloginhttps', 'admin'),
-        choose_from_menu ($noyesoptions, 'loginhttps', $config->loginhttps, '', '', '', true) );
-
-/// runclamonupload
-    $security['runclamonupload'] = new configvar (get_string('configrunclamonupload', 'admin'),
-        choose_from_menu($noyesoptions, 'runclamonupload', $config->runclamonupload, '', '', '', true) );
-
-/// pathtoclam
-    $security['pathtoclam'] = new configvar (get_string('configpathtoclam', 'admin'),
-        '<input type="text" name="pathtoclam" size="30" value="'.$config->pathtoclam.'" alt="pathtoclam" />' );
-
-/// quarantinedir
-    $security['quarantinedir'] = new configvar (get_string('configquarantinedir', 'admin'),
-        '<input type="text" name="quarantinedir" size="30" value="'.$config->quarantinedir.'" alt="quarantinedir" />' );
-
-/// clamfailureonupload
-    unset($options);
-    $options['donothing'] = get_string('configclamdonothing', 'admin');
-    $options['actlikevirus'] = get_string('configclamactlikevirus', 'admin');
-
-    $security['clamfailureonupload'] = new configvar (get_string('configclamfailureonupload', 'admin'),
-        choose_from_menu($options, 'clamfailureonupload', $config->clamfailureonupload, '', '', '', true) );
-
-
-
-
-////////////////////////////////////////////////////////////////////
-/// MAINTENANCE config variables
-////////////////////////////////////////////////////////////////////
-    $maintenance = array();
-
-/// longtimenosee
-    unset($options);
-    $options[0]    = get_string('never');
-    $options[1000] = get_string('numdays', '', 1000);
-    $options[365]  = get_string('numdays', '', 365);
-    $options[180]  = get_string('numdays', '', 180);
-    $options[150]  = get_string('numdays', '', 150);
-    $options[120]  = get_string('numdays', '', 120);
-    $options[90]   = get_string('numdays', '', 90);
-    $options[60]   = get_string('numdays', '', 60);
-    $options[30]   = get_string('numdays', '', 30);
-    $options[21]   = get_string('numdays', '', 21);
-    $options[14]   = get_string('numdays', '', 14);
-    $options[7]   = get_string('numdays', '', 7);
-
-    $maintenance['longtimenosee'] = new configvar (get_string('configlongtimenosee', 'admin'),
-        choose_from_menu ($options, 'longtimenosee', $config->longtimenosee, '', '', '', true) );
-
-/// deleteunconfirmed
-    unset($options);
-    $options[0]    = get_string('never');
-    $options[168]  = get_string('numdays', '', 7);
-    $options[144]  = get_string('numdays', '', 6);
-    $options[120]  = get_string('numdays', '', 5);
-    $options[96]   = get_string('numdays', '', 4);
-    $options[72]   = get_string('numdays', '', 3);
-    $options[48]   = get_string('numdays', '', 2);
-    $options[24]   = get_string('numdays', '', 1);
-    $options[12]   = get_string('numhours', '', 12);
-    $options[6]    = get_string('numhours', '', 6);
-    $options[1]    = get_string('numhours', '', 1);
-
-    $maintenance['deleteunconfirmed'] = new configvar (get_string('configdeleteunconfirmed', 'admin'),
-        choose_from_menu ($options, 'deleteunconfirmed', $config->deleteunconfirmed, '', '', '', true) );
-
-/// loglifetime
-    unset($options);
-    $options[0]    = get_string('neverdeletelogs');
-    $options[1000] = get_string('numdays', '', 1000);
-    $options[365]  = get_string('numdays', '', 365);
-    $options[180]  = get_string('numdays', '', 180);
-    $options[150]  = get_string('numdays', '', 150);
-    $options[120]  = get_string('numdays', '', 120);
-    $options[90]   = get_string('numdays', '', 90);
-    $options[60]   = get_string('numdays', '', 60);
-    $options[30]   = get_string('numdays', '', 30);
-
-    $maintenance['loglifetime'] = new configvar (get_string('configloglifetime', 'admin'),
-        choose_from_menu ($options, 'loglifetime', $config->loglifetime, '', '', '', true) );
-
-
-////////////////////////////////////////////////////////////////////
-/// MAIL config variables
-////////////////////////////////////////////////////////////////////
-    $mail = array();
-
-/// smtphosts
-    $mail['smtphosts'] = new configvar (get_string('configsmtphosts', 'admin'),
-        '<input name="smtphosts" type="text" size="30" value="'.s($config->smtphosts).'" alt="smtphosts" />' );
-
-/// smtpuser
-    $mail['smtpuser'] = new configvar (get_string('configsmtpuser', 'admin'),
-        '<input name="smtpuser" type="text" size="10" value="'.s($config->smtpuser).'" alt="smtpuser" />' );
-
-/// smtppass
-    $mail['smtppass'] = new configvar ('',
-        '<input name="smtppass" type="password" size="10" value="'.s($config->smtppass).'" alt="smtppass" />' );
-
-/// noreplyaddress
-    $mail['noreplyaddress'] = new configvar (get_string('confignoreplyaddress', 'admin'),
-        '<input name="noreplyaddress" type="text" size="30" value="'.s($config->noreplyaddress).'" alt="noreplyaddress" />' );
-
-/// digestmailtime
-    $hours = array();
-    for ($i=0; $i<=23; $i++) {
-        $hours[$i] = sprintf("%02d",$i);
-    }
-
-    $mail['digestmailtime'] = new configvar (get_string('configdigestmailtime', 'admin'),
-        choose_from_menu($hours, 'digestmailtime', $config->digestmailtime, '', '', 0, true) );
-
-/// allowemailaddresses
-    $mail['allowemailaddresses'] = new configvar (get_string('configallowemailaddresses', 'admin'),
-        '<input name="allowemailaddresses" type="text" size="60" value="'.s($config->allowemailaddresses).'" alt="allowemailaddresses" />' );
-
-/// denyemailaddresses
-    $mail['denyemailaddresses'] = new configvar (get_string('configdenyemailaddresses', 'admin'),
-        '<input name="denyemailaddresses" type="text" size="60" value="'.s($config->denyemailaddresses).'" alt="denyemailaddresses" />' );
-
-    if (!empty($CFG->unicodedb)) { ///These options are only available if running under unicodedb
-    /// sitemailcharset
-        unset($options);
-        unset($charsets);
-        $charsets = get_list_of_charsets();
-        $options['0'] = get_string('none');
-        $options = array_merge($options, $charsets);
-        $mail['sitemailcharset'] = new configvar (get_string('configsitemailcharset', 'admin'),
-            choose_from_menu($options, 'sitemailcharset', $config->sitemailcharset, '', '', '', true));
-
-    /// allowusermailcharset
-        $mail['allowusermailcharset'] = new configvar (get_string('configallowusermailcharset', 'admin'),
-            choose_from_menu($noyesoptions, 'allowusermailcharset', $config->allowusermailcharset, '', '', '', true));
-    }
-    
-/// enable stats
-if (empty($CFG->disablestatsprocessing)) {
-    $stats['enablestats'] = new configvar (get_string('configenablestats','admin'),
-        choose_from_menu($noyesoptions, 'enablestats', $config->enablestats, '', '', '', true) );
-
-    unset($options);
-    $options['none'] = get_string('none');
-    $options[60*60*24*7] = get_string('numweeks','moodle',1);
-    $options[60*60*24*14] = get_string('numweeks','moodle',2);
-    $options[60*60*24*21] = get_string('numweeks','moodle',3);
-    $options[60*60*24*28] = get_string('nummonths','moodle',1);
-    $options[60*60*24*56] = get_string('nummonths','moodle',2);
-    $options[60*60*24*84] = get_string('nummonths','moodle',3);
-    $options[60*60*24*112] = get_string('nummonths','moodle',4);
-    $options[60*60*24*140] = get_string('nummonths','moodle',5);
-    $options[60*60*24*168] = get_string('nummonths','moodle',6);
-    $options['all'] = get_string('all');
-    
-    $stats['statsfirstrun'] = new configvar (get_string('configstatsfirstrun','admin'),
-       choose_from_menu($options,'statsfirstrun',$config->statsfirstrun,'','','',true) );
-
-    unset($options);
-    $options[0] = get_string('untilcomplete');
-    $options[60*60] = '1 '.get_string('hour');
-    $options[60*60*2] = '2 '.get_string('hours');
-    $options[60*60*3] = '3 '.get_string('hours');
-    $options[60*60*4] = '4 '.get_string('hours');
-    $options[60*60*5] = '5 '.get_string('hours');
-    $options[60*60*6] = '6 '.get_string('hours');
-    $options[60*60*7] = '7 '.get_string('hours');
-    $options[60*60*8] = '8 '.get_string('hours');
-
-    if (empty($config->statsruntimestarthour)) {
-        $config->statsruntimestarthour = 0;
-    }
-    if (empty($config->statsruntimestartminute)) {
-        $config->statsruntimestartminute = 0;
-    }
-
-    $stats['statsmaxruntime'] = new configvar (get_string('configstatsmaxruntime','admin'),
-      choose_from_menu($options,'statsmaxruntime',$config->statsmaxruntime,'','','',true) );                                        
-
-    $stats['statsruntimestart'] = new configvar (get_string('configstatsruntimestart','admin'),
-      print_time_selector("statsruntimestarthour","statsruntimestartminute",make_timestamp(2000,1,1,$config->statsruntimestarthour,$config->statsruntimestartminute),5,true) );
-
-    $stats['statsuserthreshold'] = new configvar (get_string('configstatsuserthreshold','admin'),
-      '<input type="text" name="statsuserthreshold" size="4" value="'.$config->statsuserthreshold.'" />');
-}                                        
-
-////////////////////////////////////////////////////////////////////
-
-    $configvars['interface']       = $interface;
-    $configvars['security']        = $security;
-    $configvars['operatingsystem'] = $operatingsystem;
-    $configvars['maintenance']     = $maintenance;
-    $configvars['mail']            = $mail;
-    $configvars['user']            = $user;
-    $configvars['permissions']     = $permissions;
-    $configvars['requestedcourse'] = $reqcourse;
-    $configvars['misc']            = $misc;
-if (empty($CFG->disablestatsprocessing)) {
-    $configvars['stats']           = $stats;
-}
-
-?>
index ca9dc76..9c75be9 100644 (file)
     require_once("$CFG->dirroot/lib/locallib.php");
     upgrade_local_db("$CFG->wwwroot/$CFG->admin/index.php");  // Return here afterwards
 
+/// Check for new groups and upgrade if necessary. TODO:
+    require_once("$CFG->dirroot/group/db/upgrade.php");
+    upgrade_group_db("$CFG->wwwroot/$CFG->admin/index.php");  // Return here afterwards
+
 /// just make sure upgrade logging is properly terminated
     upgrade_log_finish();
 
index d49957c..469ad31 100755 (executable)
         /// In the .html file below we loop through these results and exclude any in $contextusers
 
         echo '<div align="center">'.$strcurrentcontext.': '.print_context_name($context).'<br/>';
-        echo $strroletoassign.': ';
+        echo '<label for="jump">'.$strroletoassign.'</label>: ';
         $assignableroles = array('0'=>get_string('listallroles', 'role').'...') + $assignableroles; 
         popup_form("$CFG->wwwroot/$CFG->admin/roles/assign.php?userid=$userid&amp;courseid=$courseid&amp;contextid=$contextid&amp;roleid=",
             $assignableroles, 'switchrole', $roleid, '');
index 3b5ac3d..413f096 100755 (executable)
@@ -304,8 +304,8 @@ if ($um->preprocess_files() && confirm_sesskey()) {
                             if (!$course[$i]) {
                                 notify(get_string('coursegroupunknown','error',$addgroup[$i]));
                             } else {
-                                if ($group = get_record("groups","courseid",$course[$i]->id,"name",$addgroup[$i])) {
-                                    $groupid[$i] = $group->id;
+                                if ($groupid = groups_get_group_by_name($course[$i]->id, $addgroup[$i])) { //TODO:check.
+                                    $groupid[$i] = $groupid;
                                 } else {
                                     notify(get_string('groupunknown','error',$addgroup[$i]));
                                 }
diff --git a/admin/utfdbmigrate.html b/admin/utfdbmigrate.html
deleted file mode 100644 (file)
index 1f118fa..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-   if (!isset($form->dbhost)) {
-       $form->dbhost = '';
-   }
-   if (!isset($form->dbname)) {
-       $form->dbname = '';
-   }
-   if (!isset($form->dbuser)) {
-       $form->dbuser = '';
-   }
-   if (!isset($form->dbpass)) {
-       $form->dbpass = '';
-   }
-   if (!isset($form->dbcluster)) {
-       $form->dbcluster = '';
-   }
-   if (!isset($form->pathtopgdump)) {
-       $form->pathtopgdump = '';
-   }
-   if (!isset($form->pathtopsql)) {
-       $form->pathtopsql = '';
-   }
-?>
-<form name="migratefrom" action="utfdbmigrate.php" method="POST">
-<input name="migrate" type="hidden" value="1" />
-<input name="sesskey" type="hidden" value="<?php echo sesskey() ?>" />
-<?php if (isset($err["dbconnect"])) formerr($err["dbconnect"]); ?>
-<?php if (isset($err["pathtopgdump"])) formerr($err["pathtopgdump"]); ?>
-<?php if (isset($err["pathtopsql"])) formerr($err["pathtopsql"]); ?>
-<table cellpadding="9" cellspacing="0" width="500">
-<tr valign="top">
-    <td align="right"><?php print_string("dbhost", "install") ?>:</td>
-    <td><input type="text" name="dbhost" value="<?php p($form->dbhost) ?>" />
-    </td>
-</tr>
-<tr valign="top">
-    <td align="right"><?php print_string("database", "install") ?>:</td>
-    <td><input type="text" name="dbname" value="<?php p($form->dbname) ?>" />
-    </td>
-</tr>
-<tr valign="top">
-    <td align="right"><?php print_string("user") ?>:</td>
-    <td><input type="text" name="dbuser" value="<?php p($form->dbuser) ?>" />
-    </td>
-</tr>
-<tr valign="top">
-    <td align="right"><?php print_string("password") ?>:</td>
-    <td><input type="text" name="dbpass" value="<?php p($form->dbpass) ?>" />
-    </td>
-</tr>
-<tr valign="top">
-    <td align="right"><?php print_string("pgcluster", "admin") ?>:</td>
-    <td><input type="text" name="dbcluster" value="<?php p($form->dbcluster) ?>" />
-    <td><?php print_string("pgclusterdescription", "admin") ?></td>
-</tr>
-<tr valign="top">
-    <td align="right" nowrap="nowrap"><?php print_string("pathtopgdump","admin") ?>:</td>
-    <td><input type="text" name="pathtopgdump" value="<?php p($form->pathtopgdump) ?>" />
-    <td><?php print_string("pathtopgdumpdesc","admin"); ?></td>
-</tr>
-<tr valign="top">
-    <td align="right" nowrap="nowrap"><?php print_string("pathtopsql","admin") ?>:</td>
-    <td><input type="text" name="pathtopsql" value="<?php p($form->pathtopsql) ?>" />
-    <td><?php print_string("pathtopsqldesc","admin"); ?></td>
-</tr>
-</table>
-<center>
-<input type="submit" value="<?php print_string('continue') ?>"/>
-&nbsp;<input type="button" value="<?php print_string('cancel') ?>" onclick="javascript:history.go(-1)" />
-</center>
\ No newline at end of file
diff --git a/admin/utfdbmigrate.php b/admin/utfdbmigrate.php
deleted file mode 100755 (executable)
index f2ef9bc..0000000
+++ /dev/null
@@ -1,1238 +0,0 @@
-<?php //$Id$
-
-///dummy field names are used to help adding and dropping indexes. There's only 1 case now, in scorm_scoes_track
-//testing
-    require_once('../config.php');
-    require_once($CFG->libdir.'/adminlib.php');
-    require_once($CFG->libdir.'/environmentlib.php');
-    require_once($CFG->dirroot.'/course/lib.php');
-    require_once($CFG->libdir.'/ddllib.php');      //We are going to need DDL services here
-    require_once($CFG->dirroot.'/backup/lib.php');  //We are going to need BACKUP services here
-    define ('BACKUP_UNIQUE_CODE', '1100110011');    //One code in the past to store UTF8 temp indexes info
-    require_login();
-
-    // declare once
-    global $enc;
-    
-    $customlang = array();
-    
-    $enc = array('af' => 'iso-8859-1', 'ar' => 'windows-1256', 'be' => 'windows-1251', 'bg' => 'windows-1251', 'bs' => 'windows-1250', 'ca' => 'iso-8859-1', 'cs' => 'iso-8859-2', 'da' => 'iso-8859-1', 'de' => 'iso-8859-1', 'de_du' => 'iso-8859-1', 'de_utf8' => 'utf-8', 'el' => 'windows-1253', 'en' => 'iso-8859-1', 'en_ja' => 'euc-jp', 'en_us' => 'iso-8859-1', 'en_utf8' => 'utf-8', 'es' => 'iso-8859-1', 'es_ar' => 'iso-8859-1', 'es_es' => 'iso-8859-1', 'es_mx' => 'iso-8859-1', 'et' => 'iso-8859-1', 'eu' => 'iso-8859-1', 'fa' => 'windows-1256', 'fa_utf8' => 'utf-8', 'fi' => 'iso-8859-1', 'fil' => 'iso-8859-15', 'fr' => 'iso-8859-1', 'fr_ca' => 'iso-8859-15', 'ga' => 'iso-8859-1', 'gl' => 'iso-8859-1', 'he' => 'ISO-8859-8-I', 'he_utf8' => 'utf-8', 'hi' => 'iso-8859-1', 'hr' => 'windows-1250', 'hr_utf8' => 'utf-8', 'hu' => 'iso-8859-2', 'id' => 'iso-8859-1', 'is' => 'iso-8859-1', 'it' => 'iso-8859-1', 'ja' => 'EUC-JP', 'ja_utf8' => 'UTF-8', 'ka_utf8' => 'UTF-8', 'km_utf8' => 'UTF-8', 'kn_utf8' => 'utf-8', 'ko' => 'EUC-KR', 'ko_utf8' => 'UTF-8', 'lt' => 'windows-1257', 'lv' => 'ISO-8859-4', 'mi_nt' => 'iso-8859-1', 'mi_tn_utf8' => 'utf-8', 'ms' => 'iso-8859-1', 'nl' => 'iso-8859-1', 'nn' => 'iso-8859-1', 'no' => 'iso-8859-1', 'no_gr' => 'iso-8859-1', 'pl' => 'iso-8859-2', 'pt' => 'iso-8859-1', 'pt_br' => 'iso-8859-1', 'ro' => 'iso-8859-2', 'ru' => 'windows-1251', 'sk' => 'iso-8859-2', 'sl' => 'iso-8859-2', 'sl_utf8' => 'utf-8', 'so' => 'iso-8859-1', 'sq' => 'iso-8859-1', 'sr_utf8' => 'utf-8', 'sv' => 'iso-8859-1', 'th' => 'TIS-620', 'th_utf8' => 'UTF-8', 'tl' => 'iso-8859-15', 'tl_utf8' => 'UTF-8', 'tr' => 'iso-8859-9', 'uk' => 'windows-1251', 'vi_utf8' => 'UTF-8', 'zh_cn' => 'GB18030', 'zh_cn_utf8' => 'UTF-8', 'zh_tw' => 'Big5', 'zh_tw_utf8' => 'UTF-8');
-
-    /**************************************
-     * Custom lang pack handling           *
-     **************************************/
-    
-    // scan list of langs, including customs packs
-    $langs = get_list_of_languages();
-    
-    // foreach lang
-    foreach ($langs as $lang => $lang1) {
-      
-        if (in_array($lang, array_keys($enc))) {
-              // if already in array, ignore
-            continue;  
-        }
-        
-        // if this lang has got a charset    
-        
-        if ($result = get_string_from_file('thischarset',$CFG->dirroot.'/lang/'.$lang.'/moodle.php', "\$resultstring")) {
-            eval($result);    
-            $enc[$lang] = $resultstring;        
-        } else if ($result = get_string_from_file('parentlanguage',$CFG->dirroot.'/lang/'.$lang.'/moodle.php',"\$resultstring")) {
-        // else if there's a parent lang we can use
-            eval($result);
-              $enc[$lang] = $enc[$resultstring];  
-        } else {
-             notify ('unknown lang pack detected '.$lang); 
-        }
-
-    }    
-    
-    /**************************************
-     * End custom lang pack handling      *
-     **************************************/
-
-    require_capability('moodle/site:config', get_context_instance(CONTEXT_SYSTEM, SITEID));
-
-    if (!$site = get_site()) {
-        redirect('index.php');
-    }
-
-    if (!empty($CFG->unicodedb)) {
-        error ('unicode db migration has already been performed!');
-    }
-
-    $migrate = optional_param('migrate', 0, PARAM_BOOL);
-    $confirm = optional_param('confirm', 0, PARAM_BOOL);
-    
-    $textlib = textlib_get_instance();
-
-    $stradministration   = get_string('administration');
-    $strdbmigrate = get_string('dbmigrate','admin');
-
-    $filename = $CFG->dataroot.'/'.SITEID.'/maintenance.html';    //maintenance file
-
-    print_header("$site->shortname: $stradministration", "$site->fullname",
-                 '<a href="index.php">'. "$stradministration</a> -> $strdbmigrate");
-
-    print_heading($strdbmigrate);
-
-    if ($CFG->dbtype == 'postgres7') {
-        $CFG->pagepath = 'admin/utfdbmigrate/postgresql';
-    }
-    //if $confirm
-    if ($confirm && confirm_sesskey()) {
-        //do the real migration of db
-        print_simple_box_start('center','50%');
-        print_string('importlangreminder','admin');
-        print_simple_box_end();
-        db_migrate2utf8();
-        print_heading('db unicode migration has been completed!');     
-        if (!get_config('', 'migrate_maintmode')) { // already in maint mode
-            unlink($filename);    //no longer in maintenance mode
-        }
-        unset_config('migrate_maintmode');
-        @require_logout();
-        print_continue($CFG->wwwroot.'/'.$CFG->admin.'/langimport.php');
-    }
-
-    //else if $migrate
-    else if ($migrate && confirm_sesskey()) {
-        if ($CFG->dbtype == 'postgres7' && !is_postgres_utf8()) {
-            $continue = false;
-            if (($form = data_submitted()) && isset($form->dbhost)) {
-                validate_form($form, $err);
-
-                if (count($err) == 0) {
-                    $_SESSION['newpostgresdb'] = $form;
-                    $continue = true;
-                }
-            }
-        } else {
-            $continue = true;
-        }
-        if ($continue) {
-            echo '<div align="center">';
-            print_simple_box_start('center','50%');
-            print_string('dbmigratewarning2','admin');
-            print_simple_box_end();
-            //put the site in maintenance mode
-            check_dir_exists($CFG->dataroot.'/'.SITEID, true);
-
-            if (file_exists($filename)) {
-                set_config('migrate_maintmode', 1); // already in maintenance mode
-            } else {
-                if (touch($filename)) {
-                    $file = fopen($filename, 'w');
-                    fwrite($file, get_string('maintinprogress','admin'));
-                    fclose($file);
-                } else {
-                    notify (get_string('maintfileopenerror','admin'));
-                }
-            }
-            //print second confirmation box
-            echo '<form name="migratefrom" action="utfdbmigrate.php" method="POST">';
-            echo '<input name="confirm" type="hidden" value="1" />';
-            echo '<input name="sesskey" type="hidden" value="'.sesskey().'" />';
-
-            $xmls = utf_get_xml();
-            $sumrecords = 0;   //this is the sum of all records of relavent tables.
-            foreach ($xmls as $xml) {    ///foreach xml file, we must get a list of tables
-                $dbtables = $xml['DBMIGRATION']['#']['TABLES'][0]['#']['TABLE'];    //real db tables
-            
-                foreach ($dbtables as $dbtable) {
-                    $dbtablename = $dbtable['@']['name'];
-                    
-                    if ($dbtablename=='adodb_logsql') {
-                        $prefix = '';
-                    } else {
-                        $prefix = $CFG->prefix;
-                    }
-                    $sumrecords += count_records_sql("SELECT COUNT(*) FROM {$prefix}$dbtablename");
-                }
-            }
-            echo 'Total number of records in your database is <b>'.$sumrecords.'</b>';
-            if ($sumrecords > 10000) {
-                echo '<br />Number of Records to process before halting (Leave blank for no limit) <input name="maxrecords" type="text" value="" />';
-            }
-
-            //print the "i-know-what-lang-to-use" menu
-
-            echo '<br />The whole site is in this encoding: (leave blank if you are not sure)';
-            echo '<select name="globallang"><option value="">I am not sure</option>';
-            foreach ($enc as $lang => $encoding) {
-                echo '<option value="'.$encoding.'">'.$lang.'</option>';
-            }
-            echo '</select>';
-        
-            echo '<p /><input type="submit" value="'.get_string('continue').'"/>';
-            echo '<input type="button" value="'.get_string('cancel').'" onclick="javascript:history.go(-1)" />';
-            echo '</form>';
-            echo '</div>';
-
-        } else {
-            echo '<div align="center">';
-            print_simple_box_start('center','50%');
-            print_string('dbmigratepostgres','admin');
-            print_simple_box_end();
-
-            print_simple_box_start("center", "");
-            include("utfdbmigrate.html");
-            print_simple_box_end();
-        }
-    }
-    
-    else {    //else, print welcome to migrate page message
-        echo '<div align="center">';
-        print_simple_box_start('center','50%');
-        print_string('dbmigratewarning','admin');
-        print_simple_box_end();
-        
-        /*************************************
-         * Eloy's environement checking code *
-         *************************************/
-        
-        $current_version = $CFG->release;
-
-    /// Gather and show results
-        $status = check_moodle_environment($current_version, $environment_results);
-
-        //end of env checking
-        
-    /// We only allow to continue if environmental checks have been passed ok
-        if ($status) {
-            echo '<form name="migratefrom" action="utfdbmigrate.php" method="POST">';
-            echo '<input name="migrate" type="hidden" value="1" />';
-            echo '<input name="sesskey" type="hidden" value="'.sesskey().'" />';
-            echo '<input type="submit" value="'.get_string('continue').'"/>';
-            echo '&nbsp;<input type="button" value="'.get_string('cancel').'" onclick="javascript:history.go(-1)" />';
-            echo '</form>';
-            echo '</div>';
-        }
-    }
-
-    print_footer();
-    
-  
-function db_migrate2utf8(){   //Eloy: Perhaps some type of limit parameter here
-                              //pointing to the num of records to process would be
-                              //useful. And it won't break anything, because the
-                              //crash system will continue the next time it was
-                              //executed. Also, the function could return:
-                              //0 = Some sort of error
-                              //1 = Finished completelly!
-                              //2 = Finished limit records
-                              //(using constants, of course ;-))
-                              //Then, all those errors, should be converted to
-                              //mtrace() and return 0. (showing the current 
-                              //table/field/recordid)
-
-    global $db, $CFG, $dbtablename, $fieldname, $record, $processedrecords;
-    $debug = debugging();
-
-    if ($CFG->dbtype == 'mysql') {
-        check_and_create_backup_dir(BACKUP_UNIQUE_CODE);  //Create the backup temp dir
-    }
-
-    ignore_user_abort(false); // see bug report 5352. This should kill this thread as soon as user aborts.
-    
-    @set_time_limit(0);
-    @ob_implicit_flush(true);
-    @ob_end_flush();
-
-    $maxrecords = optional_param('maxrecords', 0, PARAM_INT);
-    $globallang = optional_param('globallang', '', PARAM_FILE);
-    $processedrecords = 0;
-
-    $ignoretables = array();    //list of tables to ignore, optional
-    
-    //one gigantic array to hold all db table information read from all the migrate2utf8.xml file.
-    require_once($CFG->dirroot.'/lib/xmlize.php');
-    $xmls = utf_get_xml(1);
-    $tablestoconvert = 0; // total number of tables to convert
-    foreach ($xmls as $xml) {    ///foreach xml file, we must get a list of tables
-        $dbtables = $xml['DBMIGRATION']['#']['TABLES'][0]['#']['TABLE'];    //real db tables
-        foreach ($dbtables as $dbtable) {
-            $tablestoconvert++;
-        }
-    }
-    // progress bar handling
-    // first let's find out how many tables there are
-    
-    $done = 0;
-    print_progress($done, $tablestoconvert, 5, 1);
-    
-    
-    $textlib = textlib_get_instance();    //only 1 reference
-
-    //if unicodedb is set, migration is complete. die here;
-    if (!$crash = get_record('config','name','dbmigration')) {
-        //Duplicate the database if not unicode for postgres7
-        if ($CFG->dbtype == 'postgres7' && !is_postgres_utf8() && !is_postgres_setup()) {
-            echo '<script>';
-            echo 'document.getElementById("text").innerHTML = "Copying data to the UTF8 database for processing...";'."\n";
-            echo '</script>';
-
-            if ($_SESSION['newpostgresdb']->dbcluster) {
-                $cluster = ' --cluster ' . $_SESSION['newpostgresdb']->dbcluster;
-            } else {
-                $cluster = '';
-            }
-            $pgdump = 'pg_dump';
-            if (!empty($_SESSION['newpostgresdb']->pathtopgdump)) {
-                $pgdump = $_SESSION['newpostgresdb']->pathtopgdump;
-            }
-            $psql = 'psql';
-            if (!empty($_SESSION['newpostgresdb']->pathtopsql)) {
-                $pgsql = $_SESSION['newpostgresdb']->pathtopsql;
-            }
-            
-            $cmd = "PGPASSWORD={$CFG->dbpass} PGCLIENTENCODING='UNICODE' PGDATABASE={$CFG->dbname} $pgdump -Fp -O -x -U {$CFG->dbuser}$cluster";
-            if ($CFG->dbhost)  {
-                $host = split(":", $CFG->dbhost);
-                if ($host[0]) $cmd .= " -h {$host[0]}";
-                if (isset($host[1])) $cmd .= " -p {$host[1]}";
-            }
-            $cmds[] = $cmd;
-            $cmds[] = 'grep -v "COMMENT ON SCHEMA"';
-            $cmds[] = 'iconv -f UTF-8 -t UTF-8 -c';
-            $cmd = "PGPASSWORD={$_SESSION['newpostgresdb']->dbpass} PGDATABASE={$_SESSION['newpostgresdb']->dbname} $psql -q -U {$_SESSION['newpostgresdb']->dbuser} -v ON_ERROR_STOP=1$cluster";
-            if ($_SESSION['newpostgresdb']->dbhost)  {
-                $host = split(":", $_SESSION['newpostgresdb']->dbhost);
-                if ($host[0]) $cmd .= " -h {$host[0]}";
-                if (isset($host[1])) $cmd .= " -p {$host[1]}";
-            }
-            $cmds[] = $cmd;
-            foreach ($cmds as $key => $cmd) {
-                $files[] = tempnam($CFG->dataroot, 'utf8_');
-                $cmd = $cmd . ($key?" < {$files[$key-1]}":'') . " 2>&1 > {$files[$key]}";
-                if (stripos(PHP_OS, 'darwin') !== false && stripos($cmd,'iconv') !== false) {
-                    // I know this looks DREADFULLY hackish, but the iconv in mac os x seems to have a return code of 1 for warnings
-                    // and I cannot figure out why, it's a very different version of iconv to most *nix versions, even seems to be a 
-                    // different gnu project.
-                    // If someone can figure out a better way to do this, FEEL FREE :)
-                    // - Penny
-                    $cmd .= ' || true';
-                }
-                exec($cmd, $output, $return_var);
-                if ($key) {
-                    unlink($files[$key-1]);
-                }
-                if ($return_var) { // we are dead!
-                    unlink($files[$key]);
-                    echo '<br />';
-                    print_simple_box_start('center','50%');
-                    print_string('dbmigrationdupfailed','admin',htmlspecialchars(implode("\n", $output)));
-                    print_simple_box_end();
-                    print_footer();
-                    exit;
-                }
-            }
-            unlink(array_pop($files));
-        }
-
-        $migrationconfig = new object;
-        $migrationconfig->name = 'dbmigration';
-        $migrationconfig->value = '-1';
-        insert_record('config',$migrationconfig);  //process initiated
-        
-        //langs used, to help make recommendations on what lang packs to install
-        $langsused = new object;
-        $langsused->name = 'langsused';
-        $langsused->value = '';
-        insert_record('config',$langsused);
-
-    } else {
-
-        $crashdata = explode('##',$crash->value);
-        $crash->table = $crashdata[0];
-        $crash->field = $crashdata[1];
-        $crash->record = $crashdata[2];
-
-        notify("Resuming migration from: $crash->table / .$crash->field, Record: $crash->record");
-    }
-
-    /************************************************************************
-     * Now we got all our tables in order                                   *
-     ************************************************************************/
-    
-    foreach ($xmls as $xml) {    ///foreach xml file, we must get a list of tables
-        $dir = $xml['DBMIGRATION']['@']['type'];
-        $dbtables = $xml['DBMIGRATION']['#']['TABLES'][0]['#']['TABLE'];    //real db tables
-        
-        foreach ($dbtables as $dbtable) {
-
-            $done++;
-            print_progress($done, $tablestoconvert, 5, 1);
-            
-            $dbtablename = $dbtable['@']['name'];
-
-            // exception handling for adodb_logsql
-            // see bug 5003
-            if ($dbtablename == 'adodb_logsql') {
-                $prefix = '';
-            } else {
-                $prefix = $CFG->prefix;
-            }
-
-            if ($crash && ($dbtablename != $crash->table)) {  //resuming from crash
-                $done++; // need to update progress bar
-                continue;
-            }
-
-            if ($debug) {
-                print_heading("<br><b>Processsing db table ".$dbtablename.'...</b>');
-            }
-
-        /*  Insted of relying in the indexes defined for the table in utfmigrate.xml
-            files, we are going to use the MetaIndexes() DB call in order to detect
-            all the table indexes. Once fetched, they are saved in backup tables for
-            safe storage and they are dropped from the table.
-            At the end of the table, we'll fetch them from backup tables and all them
-            will be recreated again.
-            This will ensure that no index in lost in the UTF8 migration process and
-            they will be exactly the same for each server (custom indexes...)
-            Also this will leave free to keep the utfmigrate.xml files in sync for
-            all the existing indexes and we only have to maintain fields in such
-            files
-        */
-
-        /// Calculate all the indexes of the table
-            if ($CFG->dbtype == 'mysql' && $allindexes = $db->MetaIndexes($prefix.$dbtablename)) {
-            /// Send them to backup_ids table for temporal storage if crash
-                backup_putid(BACKUP_UNIQUE_CODE, $prefix.$dbtablename, 1, 1, $allindexes);
-            /// Drop all the indexes
-                $sqlarr = array();
-                foreach ($allindexes as $onekey => $oneindex) {
-                    $sqlarr[] = 'ALTER TABLE '.$prefix.$dbtablename.' DROP INDEX '.$onekey;
-                }
-                execute_sql_arr($sqlarr, true, $debug);
-            }
-
-            /**********************************************************
-             * This is the by pass structure. It allows us to process *
-             * tables on row basis instead of column/field basis      *
-             * It relies on a single function in migrate2utf8.php     *
-             **********************************************************/
-
-            /// first, check to see if there's a function for the whole table. By pass point (1)
-            if (file_exists($CFG->dirroot.'/'.$dir.'/db/migrate2utf8.php')) {
-                require_once($CFG->dirroot.'/'.$dir.'/db/migrate2utf8.php');
-                // this is a function to process table on role basis, e.g. user table in moodorg
-                $tablefunction = 'migrate2utf8_'.$dbtablename;
-            }
-            if ($CFG->dbtype=='mysql' && function_exists($tablefunction)) {
-                $tablefunction($dbtable['#']['FIELDS'][0]['#']['FIELD'], $crash, $debug, $maxrecords, $done, $tablestoconvert); // execute it.
-            } else {
-
-            /******************************************************
-             * No function for converting whole table, we proceed *
-             ******************************************************/
-             
-                if (!empty($dbtable['#']) && ($fields = $dbtable['#']['FIELDS'][0]['#']['FIELD']) and (!in_array($dbtablename, $ignoretables))) {
-
-                    $colnames = array();
-                    $coltypes = array();    //array to hold all column types for the table
-                    $collengths = array();    //array to hold all column lengths for the table
-                    $defaults = array();    //array to hold defaults, if any
-                    //reset holders
-                    $addindexarray = array();
-                    $adduniqueindexarray = array();
-                    $addprimaryarray = array();
-                    
-                    foreach ($fields as $field){
-
-                        //if in crash state, and field name is not the same as crash field name
-
-                        $fieldname = isset($field['@']['name'])?$field['@']['name']:"";
-                        $method = isset($field['@']['method'])?$field['@']['method']:"";
-                        $type = isset($field['@']['type'])?$field['@']['type']:"";
-                        $length = isset($field['@']['length'])?$field['@']['length']:"";
-
-                        if ($crash && ($crash->field != $fieldname)) {
-                            continue;
-                        }
-
-                        $dropindex = isset($field['@']['dropindex'])?$field['@']['dropindex']:"";
-                        $addindex = isset($field['@']['addindex'])?$field['@']['addindex']:"";
-                        $adduniqueindex = isset($field['@']['adduniqueindex'])?$field['@']['adduniqueindex']:"";
-
-                        $dropprimary = isset($field['@']['dropprimary'])?$field['@']['dropprimary']:"";
-                        $addprimary = isset($field['@']['addprimary'])?$field['@']['addprimary']:"";
-                        $default = isset($field['@']['default'])?"'".$field['@']['default']."'":"''";
-
-                        if ($fieldname != 'dummy') {
-                            $colnames[] = $fieldname;
-                            $coltypes[] = $type;
-                            $collengths[]= $length;
-                        }
-
-                        if ($debug) {
-                            echo "<br>--><b>processing db field ".$fieldname.'</b>';
-                            echo "<br>---><b>method ".$method.'</b>';
-                        }
-
-
-                        if ($CFG->dbtype == 'mysql') {
-
-                            /* Drop the index, because with index on, you can't change it to longblob
-                            
-                               NOTE: We aren't going to drop individual indexes anymore, because we have
-                                     dropped them at the begining of the table iteration, saving them to
-                                     backup temp tables. At the end of the table iteration we are going
-                                     to rebuild them back
-
-                            if ($dropindex){    //drop index if index is varchar, text etc type
-                                $SQL = 'ALTER TABLE '.$prefix.$dbtablename.' DROP INDEX '.$dropindex.';';
-                                $SQL1 = 'ALTER TABLE '.$prefix.$dbtablename.' DROP INDEX '.$CFG->prefix.$dropindex.';'; // see bug 5205
-                                if ($debug) {
-                                    $db->debug=999;
-                                }
-
-                                execute_sql($SQL, false); // see bug 5205
-                                execute_sql($SQL1, false); // see bug 5205
-
-                                if ($debug) {
-                                    $db->debug=0;
-                                }
-                            } else */
-                            if ($dropprimary) {    // drop primary key
-                                $SQL = 'ALTER TABLE '.$prefix.$dbtablename.' DROP PRIMARY KEY;';
-                                if ($debug) {
-                                    $db->debug=999;
-                                }
-                                execute_sql($SQL, $debug);
-                                if ($debug) {
-                                    $db->debug=0;
-                                }
-                            }
-
-                            /* Previously to change the field to LONGBLOB, we are going to
-                               use Meta info to fetch the NULL/NOT NULL status of the field.
-                               Then, when converting back the field to its final UTF8 status
-                               we'll apply such status (and default)
-                               This has been added on 1.7 because we are in the process of
-                               converting some fields to NULL and the assumption of all the 
-                               CHAR/TEXT fields being always NOT NULL isn't valid anymore! 
-                               Note that this code will leave remaining NOT NULL fiels
-                               unmodified at all, folowing the old approach 
-                            */
-                            if(($cols = $db->MetaColumns($prefix.$dbtablename)) && $fieldname != 'dummy') {
-                                $cols = array_change_key_case($cols, CASE_LOWER); ///lowercase col names
-                                $notnull = 'NOT NULL';  ///Old default
-                                if ($col = $cols[strtolower($fieldname)]) {
-                                /// If the column was null before UTF-8 migration, save it
-                                    if (!$col->not_null) {
-                                        $notnull = 'NULL';
-                                    /// And, if the column had an empty string as default, make it NULL now
-                                        if ($default == "''") {
-                                            $default = 'NULL';
-                                        }
-                                    }
-                                }
-                            }
-
-                            /* Change to longblob, serves 2 purposes:
-                               1. column loses encoding, so when we finally change it to unicode,
-                                  mysql does not do a double convertion
-                               2. longblobs puts no limit (ok, not really but it's large enough)
-                                  to handle most of the problems such as in bug 5194
-                            */
-
-                            $SQL = 'ALTER TABLE '.$prefix.$dbtablename;
-                            $SQL.= ' CHANGE '.$fieldname.' '.$fieldname.' LONGBLOB';
-
-                            /*
-                            if ($length > 0) {
-                                $SQL.='('.$length.') ';
-                            }
-                            $SQL .= ' CHARACTER SET binary NOT NULL DEFAULT '.$default.';';
-                            */
-                            if ($debug) {
-                                $db->debug=999;
-                            }
-                            if ($fieldname != 'dummy') {
-                                execute_sql($SQL, $debug);
-                            }
-                            if ($debug) {
-                                $db->debug=0;
-                            }
-
-                        }
-
-                        $patterns[]='/RECORDID/';    //for preg_replace
-                        $patterns[]='/\{\$CFG\-\>prefix\}/i';    //same here
-
-                        if ($method == 'PLAIN_SQL_UPDATE') {
-                            $sqldetectuser = $field['#']['SQL_DETECT_USER'][0]['#'];
-                            $sqldetectcourse = $field['#']['SQL_DETECT_COURSE'][0]['#'];
-                        }
-                        else if ($method == 'PHP_FUNCTION') {
-                            $phpfunction = 'migrate2utf8_'.$dbtablename.'_'.$fieldname;
-                        }
-
-                        ///get the total number of records for this field
-
-                        // could not use count_records because it addes prefix to adodb_logsql
-                        $totalrecords = count_records_sql("select count(*) from {$prefix}$dbtablename");
-                        $counter = 0;
-                        $recordsetsize = 50;
-
-                        if ($crash) {    //if resuming from crash
-                            //find the number of records with id smaller than the crash id
-                            $indexSQL = 'SELECT COUNT(*) FROM '.$prefix.$dbtablename.' WHERE id < '.$crash->record;
-                            $counter = count_records_sql($indexSQL);
-                        }
-
-                        if ($debug) {
-                            echo "<br>Total number of records is ..".$totalrecords;
-                            echo "<br/>Counter is $counter";
-                        }
-
-
-                        /**************************
-                         * converting each record *
-                         **************************/
-                        while(($counter < $totalrecords) and ($fieldname !='dummy') and ($method!='NO_CONV')) {    //while there is still something
-                            $SQL = 'SELECT * FROM '.$prefix.$dbtablename.' ORDER BY id ASC';
-                            if ($records = get_records_sql($SQL, $counter, $recordsetsize)) {
-                                foreach ($records as $record) {
-
-                                    //if we are up this far, either no crash, or crash with same table, field name.
-                                    if ($crash){
-                                        if ($crash->record != $record->id) {    //might set to < just in case record is deleted
-                                            continue;
-                                        } else {
-                                            $crash = 0;
-                                        }
-                                    }
-
-                                    $migrationconfig = get_record('config','name','dbmigration');
-                                    $migrationconfig->name = 'dbmigration';
-                                    $migrationconfig->value = $dbtablename.'##'.$fieldname.'##'.$record->id;
-                                    update_record('config',$migrationconfig);
-
-                                    $replacements = array();    //manual refresh
-                                    $replacements[] = $record->id;
-                                    $replacements[] = $prefix;
-
-                                    if (!empty($record->{$fieldname})) {    //only update if not empty
-                                        switch ($method){
-                                            case 'PLAIN_SQL_UPDATE':    //use the 2 statements to update
-
-                                                if ($debug) {
-                                                    $db->debug=999;
-                                                }
-
-                                                //if global lang is set, we just use that
-
-                                                if ($globallang) {
-                                                    $fromenc = $globallang;
-                                                } else {
-                                                    $userid = get_record_sql(preg_replace($patterns, $replacements, $sqldetectuser));
-                                                    $courseid = get_record_sql(preg_replace($patterns, $replacements, $sqldetectcourse));
-
-                                                    $sitelang   = $CFG->lang;
-                                                    $courselang = get_course_lang(isset($courseid->course)?$courseid->course:1);
-                                                    $userlang   = get_user_lang(isset($userid->userid)?$userid->userid:1);
-
-                                                    $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-                                                }
-
-                                                //only update if non utf8
-                                                if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
-                                                    $result = utfconvert($record->{$fieldname}, $fromenc);
-                                                    $newrecord = new object;
-                                                    $newrecord->id = $record->id;
-                                                    $newrecord->{$fieldname} = $result;
-                                                    migrate2utf8_update_record($dbtablename,$newrecord);
-                                                }
-                                                if ($debug) {
-                                                    $db->debug=0;
-                                                }
-                                            break;
-
-                                            case 'PHP_FUNCTION':    //use the default php function to execute
-                                                if ($debug) {
-                                                    $db->debug=999;
-                                                }
-                                                require_once($CFG->dirroot.'/'.$dir.'/db/migrate2utf8.php');
-                                                $phpfunction($record->id);
-                                                if ($debug) {
-                                                    $db->debug=0;
-                                                }
-                                            break;
-
-                                            default:    //no_conv, don't do anything ;-)
-                                            break;
-                                        }
-                                    }
-                                    $counter++;
-                                    if ($maxrecords) {
-                                        if ($processedrecords == $maxrecords) {
-                                            notify($maxrecords.' records processed. Migration Process halted');
-                                            print_continue('utfdbmigrate.php?confirm=1&amp;maxrecords='.$maxrecords.'&amp;sesskey='.sesskey());
-                                            print_footer();
-                                            die();
-                                        }
-                                    }
-
-                                    $processedrecords++;
-                                    //print some output once in a while
-                                    if (($processedrecords) % 1000 == 0) {
-                                        print_progress($done, $tablestoconvert, 5, 1,
-                                                       'Processing: '.$dbtablename.'/'.$fieldname.' ');
-                                    }
-                                }
-                            }else {
-                                if ($debug) {
-                                    notify('no records found!');
-                                }
-                            }
-                        }   //close the while loop
-
-                        /********************
-                         * Drop index here **
-                         ********************/
-
-                        if ($CFG->dbtype == 'mysql') {
-
-                            /*********************************
-                             * Change column encoding 2 phase*
-                             *********************************/
-
-                            /*
-                            $SQL = 'ALTER TABLE '.$CFG->prefix.$dbtablename;
-                            $SQL.= ' CHANGE '.$fieldname.' '.$fieldname.' LONGTEXT';
-                           // if ($length > 0) {
-                           //     $SQL.='('.$length.') ';
-                           // }
-                            $SQL .= ' CHARACTER SET binary NOT NULL DEFAULT '.$default.';';
-                            if ($debug) {
-                                $db->debug=999;
-                            }
-                            if ($fieldname != 'dummy') {
-                                execute_sql($SQL, $debug);
-                            }
-                            if ($debug) {
-                                $db->debug=0;
-                            }*/
-                            //phase 2
-                            $SQL = 'ALTER TABLE '.$prefix.$dbtablename;
-                            $SQL.= ' CHANGE '.$fieldname.' '.$fieldname.' '.$type;
-                            if ($length > 0) {
-                                $SQL.='('.$length.') ';
-                            }
-                            $SQL.=' CHARACTER SET utf8 ' . $notnull . ' DEFAULT '. $default . ';';
-                            if ($debug) {
-                                $db->debug=999;
-                            }
-                            if ($fieldname != 'dummy') {
-                                execute_sql($SQL, $debug);
-                            }
-                            if ($debug) {
-                                $db->debug=0;
-                            }
-                            /********************************************
-                             * build an array to add index back together*
-                             ********************************************/
-                            if ($addindex){
-                                $addindexarray[] = $addindex;
-                            } else if ($adduniqueindex) {
-                                $adduniqueindexarray[] = $adduniqueindex;
-                            } else if ($addprimary) {
-                                $addprimaryarray[] = $addprimary;
-                            }
-
-                        } else {
-
-                        //posgresql code here
-                        //No we don't need to do anything here
-
-                        }
-
-                    }
-
-                    /********************************
-                     * Adding the index back        *
-                     ********************************/
-                    $alter = 0;
-
-                    if ($CFG->dbtype=='mysql'){
-
-                        $SQL = 'ALTER TABLE '.$prefix.$dbtablename;
-                    /*
-                        NOTE: We aren't going to create the indexes back here any more because they
-                              are going to be recreated at the end of the table iteration with
-                              the info saved at the begining of it.
-
-                        if (!empty($addindexarray)) {
-                            foreach ($addindexarray as $aidx){
-                                $SQL .= ' ADD INDEX '.$aidx.',';
-                                $alter++;
-                            }
-                        }
-
-                        if (!empty($adduniqueindexarray)) {
-                            foreach ($adduniqueindexarray as $auidx){
-                                $SQL .= ' ADD UNIQUE INDEX '.$auidx.',';
-                                $alter++;
-                            }
-                        }
-                    */
-
-                        if (!empty($addprimaryarray)) {
-                            foreach ($addprimaryarray as $apm){
-                                $SQL .= ' ADD PRIMARY KEY '.$apm.',';
-                                $alter++;
-                            }
-                        }
-
-                        $SQL = rtrim($SQL, ', ');
-                        $SQL.=';';
-
-                    } else {
-                      ///posgresql code here
-                      ///No we don't need to do anything here
-
-                    }
-
-                    if ($alter) {
-                        if ($debug) {
-                            $db->debug=999;
-                        }
-                        execute_sql($SQL, $debug);
-                        if ($debug) {
-                            $db->debug=0;
-                        }
-                    }
-
-                } //if there are fields
-            
-            
-            } /// Point 1 - bypass should end here.
-            
-            
-            /************************************
-             * now we modify the table encoding *
-             ************************************/
-            if ($CFG->dbtype=='mysql'){
-                $SQL = 'ALTER TABLE '.$prefix.$dbtablename.' CHARACTER SET utf8';
-                if ($debug) {
-                    $db->debug=999;
-                }
-                execute_sql($SQL, $debug);
-                if ($debug) {
-                    $db->debug=0;
-                }
-
-            } else {
-
-                ///posgresql code here
-                ///No we don't need to do anything here
-            }
-
-        /// Recreate all the indexes previously dropped and sent to backup
-        /// tables. Retrieve information from backup tables
-            if ($backupindexes = backup_getid(BACKUP_UNIQUE_CODE, $prefix.$dbtablename, 1)) {
-            /// Confirm we have indexes
-                if ($allindexes = $backupindexes->info) {
-                /// Recreate all the indexes
-                    $sqlarr = array();
-                    foreach ($allindexes as $onekey => $oneindex) {
-                        $unique = $oneindex['unique']? 'UNIQUE ' : '';
-                        $sqlarr[] = 'ALTER TABLE '.$prefix.$dbtablename.' ADD '.$unique.'INDEX '.$onekey.
-                                    ' ('.implode(', ', $oneindex['columns']).')';
-                    }
-                    execute_sql_arr($sqlarr, true, $debug);
-                }
-            }
-        }
-    }
-
-    if ($CFG->dbtype=='mysql') {
-        /*********************************
-         * now we modify the db encoding *
-         *********************************/
-        $SQL = 'ALTER DATABASE '.$CFG->dbname.' CHARACTER SET utf8';
-        execute_sql($SQL, $debug);
-    } else {
-        if (!is_postgres_utf8()) {
-            //This old database is now deprecated
-            set_config('migrated_to_new_db','1');
-        }
-    }
-    delete_records('config','name','dbmigration');    //bye bye
-    
-    //These have to go!
-    if ($debug) {
-        $db->debug=true;
-    }
-
-    if ($CFG->dbtype == 'postgres7') {
-        $backup_db = $GLOBALS['db'];
-        $GLOBALS['db'] = &get_postgres_db();
-    }
-
-    execute_sql('TRUNCATE TABLE '.$CFG->prefix.'cache_text', $debug);
-    execute_sql('TRUNCATE TABLE '.$CFG->prefix.'cache_filters', $debug);
-
-    if ($CFG->dbtype == 'postgres7') {
-        $GLOBALS['db'] = $backup_db;
-        unset($backup_db);
-    }
-    if ($debug) {
-        $db->debug=0;
-    }
-
-    //update site language
-    $sitelanguage = get_record('config','name', 'lang');
-    if (strstr($sitelanguage->value, 'utf8')===false and $sitelanguage->value) {
-        $sitelanguage->value.='_utf8';
-        migrate2utf8_update_record('config',$sitelanguage);
-    }
-
-    //finish the javascript bar
-    $done = $tablestoconvert;
-    print_progress($done, $tablestoconvert, 5, 1);
-    
-    //prints the list of langs used in this site
-    print_simple_box_start('center','50%');
-    echo '<div align="center">The following Language Packs are needed for your users and courses. Please install the following Language Packs:<br><b>';
-    $langsused = get_record('config','name', 'langsused');
-    $langs = explode (',',$langsused->value);
-    
-    foreach ($langs as $lang) {
-        if (!empty($lang) and $lang != 'en_utf8') {
-            echo $lang.', ';
-        }
-    }
-    echo '</b><br/><a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/langimport.php">Language Import Utility</a></div>';
-    print_simple_box_end();
-    delete_records('config','name','langsused');
-
-    //remove the cache file!
-    @unlink($CFG->dataroot.'/cache/languages');
-
-    //remove backup temp storage
-    if ($CFG->dbtype = 'mysql') {
-        $pref->backup_unique_code = BACKUP_UNIQUE_CODE;
-        clean_temp_data($pref);
-    }
-
-    // Regenerate some cached data
-    
-    if ($CFG->dbtype == 'mysql') {
-        $db->Execute("SET NAMES 'utf8'");
-    } else if ($CFG->dbtype == 'postgres7') {
-        $db->Execute("SET NAMES 'utf8'");
-    }
-    
-    rebuild_course_cache();
-
-    //set the final flag
-    migrate2utf8_set_config('unicodedb','true');    //this is the main flag for unicode db
-
-     //echo date("H:i:s");
-}
-
-
-/* returns the course lang
- * @param int courseid
- * @return string
- */
-function get_course_lang($courseid) {
-
-    static $coursecache;
-    
-    if (!isset($coursecache[$courseid])) {
-        if ($course = get_record('course','id',$courseid)){
-            $coursecache[$courseid] = $course->lang;
-            return $course->lang;
-        }
-        return false;
-    } else {
-        return $coursecache[$courseid];
-    }
-}
-
-/* returns the teacher's lang
- * @param int courseid
- * @return string
- */
-function get_main_teacher_lang($courseid) {
-    //editting teacher > non editting teacher
-    global $CFG;
-    static $mainteachercache;
-    
-    if ($courseid == SITEID || $courseid==0) {
-        $admin = get_admin();
-        $mainteachercache[$courseid] = $admin->lang;
-        return $admin->lang;
-    }
-    
-    if (!isset($mainteachercache[$courseid])) {
-        
-        /// this is a worse guess
-        if (!empty($CFG->rolesactive)) {
-            
-            $context = get_context_instance(CONTEXT_COURSE, $courseid);
-            $teachers = get_users_by_capability($context, 'moodle/legacy:editingteacher', 'u.id, u.lang', 'ra.id ASC', 0, 1); // only need first one
-            if (is_array($teachers)) {
-                $teacher = reset($teachers);
-                $mainteachercache[$courseid] = $teacher->lang;
-                return $teacher->lang;
-            }
-        /// this is a better guess
-        } else {
-      
-            $SQL = 'SELECT u.id, u.lang 
-                    FROM '.$CFG->prefix.'user_teachers ut,
-                         '.$CFG->prefix.'course c,
-                         '.$CFG->prefix.'user u 
-                    WHERE c.id = ut.course AND 
-                          ut.course = '.$courseid.' AND 
-                          u.id = ut.userid 
-                    ORDER BY ut.authority ASC';
-
-            if ($teacher = get_record_sql($SQL, true)) {
-                $mainteachercache[$courseid] = $teacher->lang;
-                return $teacher->lang;
-            }
-        }
-    /// Arriving here we haven't been able to select any teacher lang
-    /// so use the admin lang
-        $admin = get_admin();
-        $mainteachercache[$courseid] = $admin->lang;
-        return $admin->lang;
-    } else {
-        return $mainteachercache[$courseid];
-    }
-}
-
-function get_original_encoding($sitelang, $courselang, $userlang){
-
-    global $CFG, $enc;
-
-    $lang = '';
-    if ($courselang) {
-        $lang = $courselang;
-    }
-    else if ($userlang) {
-        $lang = $userlang;
-    }
-    else if ($sitelang) {
-        $lang = $sitelang;
-    }
-    else {
-        error ('no language found!');
-    }
-
-    if ($enc[$lang]) {
-        return $enc[$lang];
-    } else {
-        notify ('unknown language detected: '.$lang);
-        return false;
-    }
-}
-
-/* returns the user's lang
- * @param int userid
- * @return string
- */
-function get_user_lang($userid) {
-
-    static $usercache;
-    
-    if (!isset($usercache[$userid])) {
-        if ($user = get_record('user','id',$userid)) {
-            $usercache[$userid] = $user->lang;
-            return $user->lang;
-        }
-    } else {
-        return $usercache[$userid];
-    }
-    return false;
-}
-
-// a placeholder for now
-function log_the_problem_somewhere() {  //Eloy: Nice function, perhaps we could use it, perhpas no. :-)
-    global $CFG, $dbtablename, $fieldname, $record;
-    if ($CFG->debug>7) {
-        echo "<br />Problem converting: $dbtablename -> $fieldname -> {$record->id}!";
-    }
-}
-
-// only this function should be used during db migraton, because of addslashes at the end of the convertion
-function utfconvert($string, $enc, $slash=true) {
-    global $textlib;
-    if ($result = $textlib->convert($string, $enc)) {
-        if ($slash) {
-            $result = addslashes($result);
-        }
-    }
-    return $result;
-}
-
-function validate_form(&$form, &$err) {
-    global $CFG;
-
-    $newdb = &ADONewConnection('postgres7');
-    error_reporting(0);  // Hide errors
-    $dbconnected = $newdb->Connect($form->dbhost,$form->dbuser,$form->dbpass,$form->dbname);
-    error_reporting($CFG->debug);  // Show errors
-    if (!$dbconnected) {
-        $err['dbconnect'] = get_string('dbmigrateconnecerror', 'admin');
-        return;
-    }
-
-    if (!is_postgres_utf8($newdb)) {
-        $encoding = $newdb->GetOne('SHOW server_encoding');
-        $err['dbconnect'] = get_string('dbmigrateencodingerror', 'admin', $encoding);
-        return;
-    }
-
-    if (!empty($form->pathtopgdump) && !is_executable($form->pathtopgdump)) {
-        $err['pathtopgdump'] = get_string('pathtopgdumpinvalid','admin');
-        return;
-    }
-
-    if (!empty($form->pathtopsql) && !is_executable($form->pathtopsql)) {
-        $err['pathtopsql'] = get_string('pathtopsqlinvalid','admin');
-        return;
-    }                                   
-
-    return;
-}
-
-function is_postgres_utf8($thedb = null) {
-    if ($thedb === null) {
-        $thedb = &$GLOBALS['db'];
-    }
-
-    $db_encoding_postgres = $thedb->GetOne('SHOW server_encoding');
-    if (strtoupper($db_encoding_postgres) == 'UNICODE' || strtoupper($db_encoding_postgres) == 'UTF8') {
-        return true;
-    } else {
-        return false;
-    }
-}
-
-function &get_postgres_db() {
-    static $postgres_db;
-
-    if (!$postgres_db) {
-        if (is_postgres_utf8()) {
-            $postgres_db = &$GLOBALS['db'];
-        } else {
-            $postgres_db = &ADONewConnection('postgres7');
-            $postgres_db->Connect($_SESSION['newpostgresdb']->dbhost,$_SESSION['newpostgresdb']->dbuser,$_SESSION['newpostgresdb']->dbpass,$_SESSION['newpostgresdb']->dbname);
-        }
-    }
-
-    return $postgres_db;
-}
-
-function is_postgres_setup() {
-    $postgres_db = &get_postgres_db();
-
-    return $GLOBALS['db']->MetaTables() == $postgres_db->MetaTables();
-}
-
-function migrate2utf8_update_record($table,$record) {
-    global $CFG;
-
-    if ($CFG->dbtype == 'mysql') {
-        update_record($table,$record);
-    } else {
-        $backup_db = $GLOBALS['db'];
-        $GLOBALS['db'] = &get_postgres_db();
-        global $in;
-        $in = true;
-        update_record($table,$record);
-        $GLOBALS['db'] = $backup_db;
-    }
-}
-
-function migrate2utf8_set_config($name, $value, $plugin=NULL) {
-    global $CFG;
-    if ($CFG->dbtype == 'mysql') {
-        set_config($name, $value, $plugin);
-    } else {
-        $backup_db = $GLOBALS['db'];
-        $GLOBALS['db'] = &get_postgres_db();
-        set_config($name, $value, $plugin);
-        $GLOBALS['db'] = $backup_db;
-    }
-}
-
-// this needs to print an error when a mod does not have a migrate2utf8.xml
-function utf_get_xml ($mode=0) { // if mode is 1, do not perform check for script validity
-    global $CFG;
-
-    $xmls = array();
-    $noscript = 0; // we assume all mod and all blocks have migration scripts
-
-    /*****************************************************************************
-     * traverse order is mod->backup->block->block_plugin->enroll_plugin->global *
-     *****************************************************************************/
-
-    ///mod
-    if (!$mods = get_list_of_plugins('mod')) {
-        error('No modules installed!');
-    }
-
-    foreach ($mods as $mod){
-        if (file_exists($CFG->dirroot.'/mod/'.$mod.'/db/migrate2utf8.xml')) {
-            $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/mod/'.$mod.'/db/migrate2utf8.xml'));
-        } else if (!$mode) {
-            $noscript = 1;
-            notify('warning, there is no migration script detected for this module - '.$mod);
-        }
-    }
-
-    ///Backups
-    $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/backup/db/migrate2utf8.xml'));
-
-    ///Blocks
-    $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/blocks/db/migrate2utf8.xml'));
-
-    ///Block Plugins
-    if (!$blocks = get_list_of_plugins('blocks')) {
-        //error('No blocks installed!');    //Eloy: Is this a cause to stop?
-    }
-
-    foreach ($blocks as $block){
-        if (file_exists($CFG->dirroot.'/blocks/'.$block.'/db/migrate2utf8.xml')) {
-            $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/blocks/'.$block.'/db/migrate2utf8.xml'));
-        } else if (!$mode) {
-            if (file_exists($CFG->dirroot.'/blocks/'.$block.'/db/mysql.sql') && filesize($CFG->dirroot.'/blocks/'.$block.'/db/mysql.sql')) { // if no migration script, and have db script, we are in trouble
-                notify('warning, there is no migration script detected for this block - '.$block);
-                $noscript = 1;
-            }
-        }
-    }
-
-    ///Enrol
-
-    if (!$enrols = get_list_of_plugins('enrol')) {
-        //error('No enrol installed!');   //Eloy: enrol, not blocks :-) Is this a cause to stop?
-    }
-
-    foreach ($enrols as $enrol){
-        if (file_exists($CFG->dirroot.'/enrol/'.$enrol.'/db/migrate2utf8.xml')) {
-           $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/enrol/'.$enrol.'/db/migrate2utf8.xml'));
-        }
-    }
-
-    ///Lastly, globals
-
-    $xmls[] = xmlize(file_get_contents($CFG->dirroot.'/lib/db/migrate2utf8.xml'));
-    
-    if ($noscript) {
-        notify ('Some of your modules or Blocks do not have a migration script. It is very likely that these are contrib modules. If your Moodle site uses non-UTF8 language packs and non-en language packs, data inside these moduels or blocks will not be displayed correctly after the migration. Please proceed with caution.');
-    }
-    
-    return $xmls;
-
-}
index 172f2e6..2f3ea49 100644 (file)
@@ -141,6 +141,14 @@ class get_db_directories extends XMLDBAction {
                 $XMLDB->dbdirs[$dbdir->path]->path_exists = file_exists($dbdir->path);  //Update status
             }
         }
+        
+    /// Now, groups
+        $dbdir->path = $CFG->dirroot . '/group/db';
+        if (!isset($XMLDB->dbdirs[$dbdir->path])) {
+            $XMLDB->dbdirs[$dbdir->path] = $dbdir;
+        }
+        $XMLDB->dbdirs[$dbdir->path]->path_exists = file_exists($dbdir->path);  //Update status
+        
     /// Sort by key
         ksort($XMLDB->dbdirs);
 
index 611e932..987d000 100644 (file)
         $status2 = true;
 
         //Get groups 
-        $groups = get_records("groups","courseid",$preferences->backup_course);
+        $groups = get_groups($preferences->backup_course); //TODO:check.
 
         //Pring groups header
         if ($groups) {
         $status = true;
 
         //Get groups_members
-        $groups_members = get_records("groups_members","groupid",$groupid);
+        $groups_members = groups_get_members($groupid); //TODO:check.
         
         //Pring groups_members header
         if ($groups_members) {
                 //Iterate
                 foreach ($list as $dir) {
                     //Look for dir like group in groups table
-                    $data = get_record ('groups', 'courseid', $preferences->backup_course,
-                                                  'id',$dir);
+                    $data = groups_group_belongs_to_course($dir, $preferences->backup_course);
+                    //TODO:check. get_record ('groups', 'courseid', $preferences->backup_course,'id',$dir);
                     //If exists, copy it
                     if ($data) {
                         $status = backup_copy_file($rootdir."/".$dir,
diff --git a/backup/db/migrate2utf8.php b/backup/db/migrate2utf8.php
deleted file mode 100755 (executable)
index b3af4d4..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php // $Id$
-
-function migrate2utf8_backup_ids_info($recordid){
-    global $CFG, $globallang;
-
-/// Some trivial checks
-    if (empty($recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    if (!$backupids= get_record('backup_ids', 'id', $recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    if ($globallang) {
-        $fromenc = $globallang;
-    } else {
-        $sitelang   = $CFG->lang;
-        $courselang = null;
-        $userlang   = null; //N.E.!!
-
-        $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-    }
-
-/// Initialise $result
-    $result = $backupids->info;
-
-/// Convert the text
-    if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
-        $result = utfconvert($backupids->info, $fromenc);
-
-        $newbackupids = new object;
-        $newbackupids->id = $recordid;
-        $newbackupids->info = $result;
-        migrate2utf8_update_record('backup_ids',$newbackupids);
-    }
-/// And finally, just return the converted field
-    return $result;
-}
-?>
diff --git a/backup/db/migrate2utf8.xml b/backup/db/migrate2utf8.xml
deleted file mode 100755 (executable)
index 65719b7..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-<DBMIGRATION type="backup" VERSION="2005120100">
-  <TABLES>
-    <TABLE name="backup_config">
-      <FIELDS>
-        <FIELD name="name" method="NO_CONV" type="varchar" length="255" dropindex="name" adduniqueindex="name (name(255))"/>
-        <FIELD name="value" method="NO_CONV" type="varchar" length="255" />
-      </FIELDS>
-    </TABLE>
-    <TABLE name="backup_courses">
-      <FIELDS>
-        <FIELD name="laststatus" method="NO_CONV" type="char" length="1" />
-      </FIELDS>
-    </TABLE>
-    <TABLE name="backup_files">
-      <FIELDS>
-        <FIELD name="file_type" method="NO_CONV" type="varchar" length="10" dropindex="backup_files_uk" />
-        <FIELD name="path" method="NO_CONV" type="varchar" length="255" adduniqueindex="backup_files_uk (backup_code, file_type(10), path(255))"/>
-      </FIELDS>
-    </TABLE>
-    <TABLE name="backup_ids">
-      <FIELDS>
-        <FIELD name="table_name" method="NO_CONV" type="varchar" length="30" dropindex="backup_ids_uk" adduniqueindex=" backup_ids_uk(backup_code, table_name(30), old_id)"/>
-        <FIELD name="info" method="PHP_FUNCTION" type="mediumtext" length="0">
-          <PHP_FUNCTION>
-            migrate2utf8_backup_ids_info(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-      </FIELDS>
-    </TABLE>
-    <TABLE name="backup_log">
-      <FIELDS>
-        <FIELD name="info" method="NO_CONV" type="varchar" length="255" />
-      </FIELDS>
-    </TABLE>
-  </TABLES>
-</DBMIGRATION>
index f8c1168..4284cc3 100644 (file)
@@ -88,7 +88,7 @@ class block_admin extends block_list {
 
         if (($course->groupmode || !$course->groupmodeforce) && has_capability('moodle/course:managegroups', $context) && ($course->id!==SITEID)) {
             $strgroups = get_string('groups');
-            $this->content->items[]='<a title="'.$strgroups.'" href="'.$CFG->wwwroot.'/course/groups.php?id='.$this->instance->pageid.'">'.$strgroups.'</a>';
+            $this->content->items[]='<a title="'.$strgroups.'" href="'.groups_home_url($this->instance->pageid).'">'.$strgroups.'</a>';
             $this->content->icons[]='<img src="'.$CFG->pixpath.'/i/group.gif" alt="" />';
         }
 
diff --git a/blocks/db/migrate2utf8.php b/blocks/db/migrate2utf8.php
deleted file mode 100755 (executable)
index a19c5b4..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-<?php // $Id$
-function migrate2utf8_block_instance_configdata($recordid){
-    global $CFG, $globallang;
-
-    $blockinstance = get_record('block_instance','id',$recordid);
-
-    //get block instance type, we only need to worry about HTML blocks... right?????????
-    
-    $blocktype = get_record('block','id',$blockinstance->blockid);
-    
-    if ($blocktype -> name == 'html') {
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockinstance->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-       
-        $blah = unserialize(base64_decode($blockinstance->configdata));
-    /// We are going to use textlib facilities
-        
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-        $blah->text = utfconvert($blah->text, $fromenc, false);
-        
-        $blockinstance->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('block_instance',$blockinstance);
-
-        return $blah;
-
-    } else if ($blocktype -> name == 'rss_client'){
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockinstance->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-
-        $blah = unserialize(base64_decode($blockinstance->configdata));
-
-    /// We are going to use textlib facilities
-        
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-
-        $blockinstance->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('block_instance',$blockinstance);
-
-        return $blah;
-
-    } else if ($blocktype -> name == 'glossary_random'){
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockinstance->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockinstance->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-
-        $blah = unserialize(base64_decode($blockinstance->configdata));
-
-    /// We are going to use textlib facilities
-
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-        $blah->addentry = utfconvert($blah->addentry, $fromenc, false);
-        $blah->viewglossary = utfconvert($blah->viewglossary, $fromenc, false);
-        $blah->invisible = utfconvert($blah->invisible, $fromenc, false);
-
-        $blockinstance->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('block_instance',$blockinstance);
-
-        return $blah;
-
-    }
-
-}
-
-function migrate2utf8_block_pinned_configdata($recordid){
-global $CFG, $globallang;
-
-    $blockpinned = get_record('block_pinned','id',$recordid);
-
-    //get block instance type, we only need to worry about HTML blocks... right?????????
-
-    $blocktype = get_record('block','id',$blockpinned->blockid);
-
-    if ($blocktype -> name == 'html') {
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockpinned->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-
-        $blah = unserialize(base64_decode($blockpinned->configdata));
-
-    /// We are going to use textlib facilities
-
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-        $blah->text = utfconvert($blah->text, $fromenc, false);
-
-        $blockpinned->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('blockpinned',$blockpinned);
-
-        return $blah;
-
-    } else if ($blocktype -> name == 'rss_client'){
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockpinned->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-
-        $blah = unserialize(base64_decode($blockpinned->configdata));
-
-    /// We are going to use textlib facilities
-
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-
-        $blockpinned->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('blockpinned',$blockblockpinned);
-
-        return $blah;
-
-    } else if ($blocktype -> name == 'glossary_random'){
-
-        ///find course
-        if ($globallang) {
-            $fromenc = $globallang;
-        } else {
-            $sitelang   = $CFG->lang;
-            $courselang = get_course_lang($blockpinned->pageid);  //Non existing!
-            $userlang   = get_main_teacher_lang($blockpinned->pageid); //N.E.!!
-
-            $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-        }
-
-        $blah = unserialize(base64_decode($blockpinned->configdata));
-
-    /// We are going to use textlib facilities
-
-    /// Convert the text
-        $blah->title = utfconvert($blah->title, $fromenc, false);
-        $blah->addentry = utfconvert($blah->addentry, $fromenc, false);
-        $blah->viewglossary = utfconvert($blah->viewglossary, $fromenc, false);
-        $blah->invisible = utfconvert($blah->invisible, $fromenc, false);
-
-        $blockinstance->configdata = base64_encode(serialize($blah));
-
-        migrate2utf8_update_record('block_instance',$blockinstance);
-
-        return $blah;
-
-    }
-}
-?>
diff --git a/blocks/db/migrate2utf8.xml b/blocks/db/migrate2utf8.xml
deleted file mode 100755 (executable)
index c6cbd2f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-<DBMIGRATION type="blocks" VERSION="2005120100">
-  <TABLES>
-    <TABLE name="block">
-      <FIELDS>
-        <FIELD name="name" method="NO_CONV" type="varchar" length="40" />
-      </FIELDS>
-    </TABLE>
-    <TABLE name="block_instance">
-      <FIELDS>
-        <FIELD name="pagetype" method="NO_CONV" type="varchar" length="20" dropindex="pagetype" addindex="pagetype (pagetype(20))"/>
-        <FIELD name="position" method="NO_CONV" type="varchar" length="10" />
-        <FIELD name="configdata" method="PHP_FUNCTION" type="text" length="0">
-          <PHP_FUNCTION>
-            migrate2utf8_block_instance_configdata(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-      </FIELDS>
-    </TABLE>
-    <TABLE name="block_pinned">
-      <FIELDS>
-        <FIELD name="pagetype" method="NO_CONV" type="varchar" length="20" dropindex="pagetype" addindex="pagetype (pagetype(20))"/>
-        <FIELD name="position" method="NO_CONV" type="varchar" length="10" />
-        <FIELD name="configdata" method="PHP_FUNCTION" type="text" length="0">
-          <PHP_FUNCTION>
-            migrate2utf8_block_pinned_configdata(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-      </FIELDS>
-    </TABLE>
-  </TABLES>
-</DBMIGRATION>
index c0d1006..b7c2a26 100644 (file)
@@ -50,8 +50,8 @@ class block_online_users extends block_base {
 
         //Add this to the SQL to show only group users
         if ($currentgroup !== NULL) {
-            $groupmembers = ", {$CFG->prefix}groups_members gm ";
-            $groupselect .= " AND u.id = gm.userid AND gm.groupid = '$currentgroup'";
+            $groupmembers = ', '.groups_members_from_sql(); //TODO: ", {$CFG->prefix}groups_members gm ";
+            $groupselect .= groups_members_where_sql($currentgroup, 'u.id'); //" AND u.id = gm.userid AND gm.groupid = '$currentgroup'";
         }
 
         if ($COURSE->id == SITEID) {  // Site-level
diff --git a/blocks/pagedemo.php b/blocks/pagedemo.php
deleted file mode 100644 (file)
index c6de2ab..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php  // $Id$
-
-    die; //must be fixed before enabling again, see SC#971
-
-    // All of this is standard Moodle fixtures
-
-    require_once('../config.php');
-    require_once($CFG->dirroot .'/course/lib.php');
-    require_once($CFG->dirroot .'/lib/blocklib.php');
-    require_once($CFG->dirroot .'/mod/resource/lib.php');
-    require_once($CFG->dirroot .'/mod/forum/lib.php');
-
-    optional_param('blockaction');
-    optional_param('instanceid', 0, PARAM_INT);
-    optional_param('blockid',    0, PARAM_INT);
-
-    require_login();
-
-    // Begin snippet -----------------------------------------------------------------
-    // This snippet should normally be defined in another file, but I 've put it all
-    // in here to keep it simple.
-
-    // First of all define the string identifier for this "type" of page.
-    define('MOODLE_PAGE_TEST', 'testpage');
-
-    // Also, define identifiers for any non-standard block positions we want to support.
-    define('BLOCK_POS_CENTERUP', 'cu');
-    define('BLOCK_POS_CENTERDOWN', 'cd');
-
-    // The actual Page derived class
-    class page_test extends page_base {
-
-        // Mandatory; should return our identifier.
-        function get_type() {
-            return MOODLE_PAGE_TEST;
-        }
-
-        // For this test page, only admins are going to be allowed editing (for simplicity).
-        function user_allowed_editing() {
-            return isadmin();
-        }
-
-        // Also, admins are considered to have "always on" editing (I wanted to avoid duplicating
-        // the code that turns editing on/off here; you can roll your own or copy course/view.php).
-        function user_is_editing() {
-            return isadmin();
-        }
-
-        // Simple method that accepts one parameter and prints the header. Here we just ignore
-        // the parameter entirely.
-        function print_header($title) {
-            print_header("Page testing page", 'SAMPLE CUSTOM PAGE', 'home');
-        }
-        
-        // This should point to the script that displays us; it's straightforward in this case.
-        function url_get_path() {
-            global $CFG;
-            return $CFG->wwwroot .'/blocks/pagedemo.php';
-        }
-
-        // We do not need any special request variables such as ID in this case, so we 're not
-        // going to have to override url_get_parameters() here; the default suits us nicely.
-
-        // Having defined all identifiers we need, here we declare which block positions we are
-        // going to support.
-        function blocks_get_positions() {
-           return array(BLOCK_POS_LEFT, BLOCK_POS_RIGHT, BLOCK_POS_CENTERUP, BLOCK_POS_CENTERDOWN);
-        }
-
-        // And here we declare where new blocks will appear (arbitrary choice).
-        function blocks_default_position() {
-            return BLOCK_POS_CENTERUP;
-        }
-
-        // Since we 're not going to be creating multiple instances of this "page" (as we do with
-        // courses), we don't need  to provide default blocks. Otherwise we 'd need to override
-        // the blocks_get_default() method.
-
-        // And finally, a little block move logic. Given a block's previous position and where
-        // we want to move it to, return its new position. Pretty self-documenting.
-        function blocks_move_position(&$instance, $move) {
-            if($instance->position == BLOCK_POS_LEFT && $move == BLOCK_MOVE_RIGHT) {
-                return BLOCK_POS_CENTERUP;
-            } else if ($instance->position == BLOCK_POS_RIGHT && $move == BLOCK_MOVE_LEFT) {
-                return BLOCK_POS_CENTERUP;
-            } else if (($instance->position == BLOCK_POS_CENTERUP || $instance->position == BLOCK_POS_CENTERDOWN) && $move == BLOCK_MOVE_LEFT) {
-                return BLOCK_POS_LEFT;
-            } else if (($instance->position == BLOCK_POS_CENTERUP || $instance->position == BLOCK_POS_CENTERDOWN) && $move == BLOCK_MOVE_RIGHT) {
-                return BLOCK_POS_RIGHT;
-            } else if ($instance->position == BLOCK_POS_CENTERUP && $move == BLOCK_MOVE_DOWN) {
-                return BLOCK_POS_CENTERDOWN;
-            } else if ($instance->position == BLOCK_POS_CENTERDOWN && $move == BLOCK_MOVE_UP) {
-                return BLOCK_POS_CENTERUP;
-            }
-            return $instance->position;
-        }
-    }
-    // End snippet -------------------------------------------------------------------
-
-    /// Bounds for block widths on this page
-    define('BLOCK_L_MIN_WIDTH', 160);
-    define('BLOCK_L_MAX_WIDTH', 210);
-    define('BLOCK_R_MIN_WIDTH', 160);
-    define('BLOCK_R_MAX_WIDTH', 210);
-    define('BLOCK_C_MIN_WIDTH', 250);
-    define('BLOCK_C_MAX_WIDTH', 350);
-
-
-    // Before creating our page object, we need to map our page identifier to the actual name
-    // of the class which will be handling its operations. Pretty simple, but essential.
-    page_map_class(MOODLE_PAGE_TEST, 'page_test');
-
-    // Now, create our page object. The identifier "1" is passed arbitrarily because we don't
-    // have multiple "testpages"; if we did, that would be the "testpageid" from the database.
-    $PAGE = page_create_object(MOODLE_PAGE_TEST, 1);
-
-    $PAGE->print_header(NULL);
-    $editing = $PAGE->user_is_editing();
-
-    // That's it! From now on, everything is simply copy-pasted from course/view.php with a few
-    // minor tweaks to display the page layout!
-
-    // Calculate the preferred width for left, right and center (both center positions will use the same)
-    if (empty($preferred_width_left)) {
-        $preferred_width_left =  blocks_preferred_width($pageblocks[BLOCK_POS_LEFT]);
-    }
-    if (empty($preferred_width_right)) {
-        $preferred_width_right = blocks_preferred_width($pageblocks[BLOCK_POS_RIGHT]);
-    }
-    if (empty($preferred_width_centerup)) {
-        $preferred_width_centerup = blocks_preferred_width($pageblocks[BLOCK_POS_CENTERUP]);
-    }
-    if (empty($preferred_width_centerdown)) {
-        $preferred_width_centerdown =  blocks_preferred_width($pageblocks[BLOCK_POS_CENTERDOWN]);
-    }
-    $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);
-    $preferred_width_center = max($preferred_width_centerup, $preferred_width_centerdown);
-    $preferred_width_center = min($preferred_width_center, BLOCK_C_MAX_WIDTH);
-    $preferred_width_center = max($preferred_width_center, BLOCK_C_MIN_WIDTH);
-
-    // Display the blocks and allow blocklib to handle any block action requested
-    $pageblocks = blocks_get_by_page($PAGE);
-
-    if($editing) {
-        if (!empty($blockaction) && confirm_sesskey()) {
-            if (!empty($blockid)) {
-                blocks_execute_action($PAGE, $pageblocks, strtolower($blockaction), intval($blockid));
-                
-            }
-            else if (!empty($instanceid)) {
-                $instance = blocks_find_instance($instanceid, $pageblocks);
-                blocks_execute_action($PAGE, $pageblocks, strtolower($blockaction), $instance);
-            }
-            // This re-query could be eliminated by judicious programming in blocks_execute_action(),
-            // but I'm not sure if it's worth the complexity increase...
-            $pageblocks = blocks_get_by_page($PAGE);
-        }
-    }
-    
-    // The actual display logic is here
-    echo '<table style="width: 100%;"><tr>';
-
-    if(blocks_have_content($pageblocks,BLOCK_POS_LEFT) || $editing) {
-        echo '<td style="vertical-align: top; width: '.$preferred_width_left.'px;">';
-        blocks_print_group($PAGE, $pageblocks,BLOCK_POS_LEFT);
-        echo '</td>';
-    }
-
-    echo '<td style="border: 1px black solid; width: '.$preferred_width_center.'px;"><p style="text-align: center; padding: 10px; background: black; color: white;">Center-up position:</p>';
-    if(blocks_have_content($pageblocks,BLOCK_POS_CENTERUP) || $editing) {
-        blocks_print_group($PAGE, $pageblocks,BLOCK_POS_CENTERUP);
-    }
-
-    echo '<div style="padding: 10px; background: gold; text-align: center;">Content Here';
-    
-    print_object(make_timestamp(2005, 6, 1, 0, 0, 0));
-
-    echo '</div>';
-
-    echo '<p style="text-align: center; padding: 10px; background: black; color: white;">Center-down position:</p>';
-    if(blocks_have_content($pageblocks,BLOCK_POS_CENTERDOWN) || $editing) {
-        blocks_print_group($PAGE, $pageblocks,BLOCK_POS_CENTERDOWN);
-    }
-    echo '</td>';
-
-    if(blocks_have_content($pageblocks,BLOCK_POS_RIGHT) || $editing) {
-        echo '<td style="vertical-align: top; width: '.$preferred_width_right.'px;">';
-        blocks_print_group($PAGE, $pageblocks,BLOCK_POS_RIGHT);
-        if ($editing) {
-            blocks_print_adminblock($PAGE, $pageblocks);
-        }
-        echo '</td>';
-    }
-
-    // Finished! :-)
-
-    echo '</tr></table>';
-    print_footer();
-
-
-?>
index c6e5409..f0e8aaf 100644 (file)
@@ -127,10 +127,10 @@ class block_quiz_results extends block_base {
             }
 
             // Now find which groups these users belong in
-            $groupofuser = get_records_sql(
+            $groupofuser = groups_get_groups_users($userids, $courseid); /*TODO: get_records_sql(
             'SELECT m.userid, m.groupid, g.name FROM '.$CFG->prefix.'groups g LEFT JOIN '.$CFG->prefix.'groups_members m ON g.id = m.groupid '.
             'WHERE g.courseid = '.$courseid.' AND m.userid IN ('.implode(',', $userids).')'
-            );
+            );*/
 
             $groupgrades = array();
 
diff --git a/blocks/rss_client/db/migrate2utf8.php b/blocks/rss_client/db/migrate2utf8.php
deleted file mode 100755 (executable)
index 7149f45..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-<?php // $Id$
-function migrate2utf8_block_rss_client_title($recordid){
-    global $CFG, $globallang;
-
-/// Some trivial checks
-    if (empty($recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    if (!$rssclient = get_record('block_rss_client','id',$recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-    if ($globallang) {
-        $fromenc = $globallang;
-    } else {
-        $user = get_record('user','id',$rssclient->userid);
-
-        $sitelang   = $CFG->lang;
-        $courselang = NULL;  //Non existing!
-        $userlang   = $user->lang; //N.E.!!
-
-        $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-    }
-
-/// We are going to use textlib facilities
-    
-/// Convert the text
-    if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
-        $result = utfconvert($rssclient->title, $fromenc);
-
-        $newrssclient = new object;
-        $newrssclient->id = $recordid;
-        $newrssclient->title = $result;
-        migrate2utf8_update_record('block_rss_client',$newrssclient);
-    }
-/// And finally, just return the converted field
-    return $result;
-}
-
-function migrate2utf8_block_rss_client_preferredtitle($recordid){
-    global $CFG, $globallang;
-
-/// Some trivial checks
-    if (empty($recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    $SQL = "SELECT brc.userid
-           FROM {$CFG->prefix}block_rss_client brc
-           WHERE brc.id = $recordid";
-
-    if (!$rssuserid = get_record_sql($SQL)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    if (!$rssclient = get_record('block_rss_client','id',$recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    
-    if ($globallang) {
-        $fromenc = $globallang;
-    } else {
-        $user = get_record('user','id',$rssuserid->userid);
-        $sitelang   = $CFG->lang;
-        $courselang = NULL;  //Non existing!
-        $userlang   = $user->lang; //N.E.!!
-
-        $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-    }
-
-/// We are going to use textlib facilities
-    
-/// Convert the text
-    if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
-        $result = utfconvert($rssclient->preferredtitle, $fromenc);
-
-        $newrssclient = new object;
-        $newrssclient->id = $recordid;
-        $newrssclient->preferredtitle = $result;
-        migrate2utf8_update_record('block_rss_client',$newrssclient);
-/// And finally, just return the converted field
-    }
-    return $result;
-}
-
-function migrate2utf8_block_rss_client_description($recordid){
-    global $CFG, $globallang;
-
-/// Some trivial checks
-    if (empty($recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    $SQL = "SELECT brc.userid
-           FROM {$CFG->prefix}block_rss_client brc
-           WHERE brc.id = $recordid";
-
-    if (!$rssuserid = get_record_sql($SQL)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    if (!$rssclient = get_record('block_rss_client','id',$recordid)) {
-        log_the_problem_somewhere();
-        return false;
-    }
-
-    
-    if ($globallang) {
-        $fromenc = $globallang;
-    } else {
-        $user = get_record('user','id',$rssuserid->userid);
-        $sitelang   = $CFG->lang;
-        $courselang = NULL;  //Non existing!
-        $userlang   = $user->lang; //N.E.!!
-        $fromenc = get_original_encoding($sitelang, $courselang, $userlang);
-    }
-
-/// We are going to use textlib facilities
-    
-/// Convert the text
-    if (($fromenc != 'utf-8') && ($fromenc != 'UTF-8')) {
-        $result = utfconvert($rssclient->description, $fromenc);
-
-        $newrssclient = new object;
-        $newrssclient->id = $recordid;
-        $newrssclient->description = $result;
-        migrate2utf8_update_record('block_rss_client',$newrssclient);
-    }
-/// And finally, just return the converted field
-    return $result;
-}
-?>
diff --git a/blocks/rss_client/db/migrate2utf8.xml b/blocks/rss_client/db/migrate2utf8.xml
deleted file mode 100755 (executable)
index 86188be..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<DBMIGRATION type="blocks/rss_client" VERSION="2005120100">
-  <TABLES>
-    <TABLE name="block_rss_client">
-      <FIELDS>
-        <FIELD name="title" method="PHP_FUNCTION" type="text" length="0">
-          <PHP_FUNCTION>
-            migrate2utf8_block_rss_client_title(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-        <FIELD name="preferredtitle" method="PHP_FUNCTION" type="varchar" length="64">
-          <PHP_FUNCTION>
-            migrate2utf8_block_rss_client_preferredtitle(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-        <FIELD name="description" method="PHP_FUNCTION" type="text" length="0">
-          <PHP_FUNCTION>
-            migrate2utf8_block_rss_client_description(RECORDID)
-          </PHP_FUNCTION>
-        </FIELD>
-        <FIELD name="url" method="NO_CONV" type="varchar" length="255" />
-      </FIELDS>
-    </TABLE>
-  </TABLES>
-</DBMIGRATION>
index b127250..a5c1002 100755 (executable)
@@ -127,17 +127,18 @@ if (!$course = get_record('course', 'id', $courseid)) {
 
         case 'group':
 
-            $thisgroup = get_record('groups', 'id', $filterselect);
-
-            if ($tagid || !empty($tag)) {
-                print_header("$course->shortname: $blogstring", $course->fullname,
+            if ($thisgroup = groups_get_group($filterselect, false)) { //TODO:
+               if ($tagid || !empty($tag)) {
+                       print_header("$course->shortname: $blogstring", $course->fullname,
                             '<a href="'.$CFG->wwwroot.'/user/index.php?id='.$course->id.'&amp;group='.$filterselect.'">'.$thisgroup->name.'</a> ->
                             <a href="index.php?filtertype=group&amp;filterselect='.$filterselect.'">'. "$blogstring</a> -> $tagstring: $taginstance->text",'','',true,$PAGE->get_extra_header_string());
-            } else {
-                print_header("$course->shortname: $blogstring", $course->fullname,
+               } else {
+                       print_header("$course->shortname: $blogstring", $course->fullname,
                             '<a href="'.$CFG->wwwroot.'/user/index.php?id='.$course->id.'&amp;group='.$filterselect.'">'.$thisgroup->name."</a> ->
                             $blogstring",'','',true,$PAGE->get_extra_header_string());
-
+                }
+            } else {
+                print_error('Unable to find group');
             }
 
         break;
index c146594..4ea6cec 100755 (executable)
@@ -84,7 +84,7 @@ switch ($filtertype) {
         if ($CFG->bloglevel < BLOG_GROUP_LEVEL) {
             error('Group blogs is not enabled');
         }
-        if (!$group = get_record('groups','id',$groupid)) {
+        if (! $group = groups_get_group($groupid)) { //TODO:check.
             error('Incorrect group id specified');
         }
         if (!$course = get_record('course', 'id', $group->courseid)) {
index 655e14b..f2c89f1 100755 (executable)
             case 'group':
 
                 $SQL = 'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
+                        .groups_members_from_sql().', '.$CFG->prefix.'user u
+                        WHERE '.groups_members_where_sql($filterselect, 'p.userid').'
+                        AND u.id = p.userid
+                        AND u.deleted = 0
+                        AND '.$permissionsql;
+
+                        /*'SELECT '.$requiredfields.' FROM '.$CFG->prefix.'post p, '.$tagtablesql
                         .$CFG->prefix.'groups_members m, '.$CFG->prefix.'user u
                         WHERE p.userid = m.userid '.$tagquerysql.'
                         AND u.id = p.userid
                         AND m.groupid = '.$filterselect.'
                         AND u.deleted = 0
                         AND '.$permissionsql;
-
+                        */
             break;
 
             case 'user':
index f8e7ec2..722b79a 100755 (executable)
@@ -99,7 +99,8 @@
                 $info = $SITE->fullname;
                 break;
             case 'group':
-                $info = get_field('groups', 'name', 'id', $id);
+                $group = groups_get_group($id, false);
+                $info = $group->name; //TODO: get_field('groups', 'name', 'id', $id)
                 break;
             default:
                 $info = '';
index d5491c2..bc6e76a 100644 (file)
                 break;
                 case 'group':
                     $groupid = optional_param('groupid', 0, PARAM_INT);
-                    if(!($group = get_record('groups', 'id', $groupid) )) {
+                    if (! ($group = groups_get_group($groupid))) { //TODO:check.
                         calendar_get_allowed_types($allowed);
                         $eventtype = 'select';
                     }
@@ -604,14 +604,14 @@ function calendar_add_event_allowed($event) {
             return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_COURSE, $event->courseid));
 
         case 'group':
-            if (!$group = get_record('groups', 'id', $event->groupid)) {
+            if (! groups_group_exists($event->groupid)) { //TODO:check.
                 return false;
             } 
             // this is ok because if you have this capability at course level, you should be able 
             // to edit group calendar too
             // there is no need to check membership, because if you have this capability
             // you will have a role in this group context
-            return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_GROUP, $group->id));
+            return has_capability('moodle/calendar:manageentries', get_context_instance(CONTEXT_GROUP, $event->groupid));
 
         case 'user':
             if ($event->userid == $USER->id) {
index 00d2b69..5419d1d 100644 (file)
 
     $sesskey = !empty($USER->id) ? $USER->sesskey : '';
 
+//DONOTCOMMIT: TODO:
+if (debugging()) {
+    echo '<p>[ <a href="../group/groupui/?id='. $courseid .'">AJAX groups</a>
+         | <a href="../group/index.php?id='. $courseid .'">New groups</a> - debugging.]</p>';
+}
+
 /// Print out the complete form
 
     print_heading(get_string('groups'));
 
     print_footer($course);
 
-?>
+?>
\ No newline at end of file
index 373a956..eb3b708 100644 (file)
@@ -177,7 +177,7 @@ function print_recent_selector_form($course, $advancedfilter=0, $selecteduser=0,
         $groupmode =  groupmode($course);
 
         if ($groupmode == VISIBLEGROUPS or ($groupmode and has_capability('moodle/course:managegroups', get_context_instance(CONTEXT_COURSE, $course->id)))) {
-            if ($groups = get_records_menu("groups", "courseid", $course->id, "name ASC", "id,name")) {
+            if ($groups_names = groups_get_groups_names($course->id)) { //TODO:check.
             echo '<td><b>';
                 if ($groupmode == VISIBLEGROUPS) {
                     print_string('groupsvisible');
@@ -185,7 +185,7 @@ function print_recent_selector_form($course, $advancedfilter=0, $selecteduser=0,
                     print_string('groupsseparate');
                 }
                 echo ':</b></td><td>';
-                choose_from_menu($groups, "selectedgroup", $selectedgroup, get_string("allgroups"), "", "");
+                choose_from_menu($groups_names, "selectedgroup", $selectedgroup, get_string("allgroups"), "", "");
                 echo '</td>';
             }
         }
@@ -305,7 +305,7 @@ function build_logs_array($course, $user=0, $date=0, $order="l.time ASC", $limit
 
     /// Getting all members of a group.
     if ($groupid and !$user) {
-        if ($gusers = get_records('groups_members', 'groupid', $groupid)) {
+        if ($gusers = groups_get_members($groupid)) { //TODO:check.
             $first = true;
             foreach($gusers as $guser) {
                 if ($first) {
diff --git a/doc/COPYRIGHT.txt b/doc/COPYRIGHT.txt
deleted file mode 100644 (file)
index 0e3c1dd..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-Moodle - Modular Object-Oriented Dynamic Learning Environment
-http://moodle.org
-
-Copyright (C) 1999-2004  Martin Dougiamas  martin@dougiamas.com
-http://dougiamas.com
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-                
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
diff --git a/doc/contents.php b/doc/contents.php
deleted file mode 100755 (executable)
index 243b520..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?PHP  // $Id$\r
-\r
-    require("../config.php");\r
-\r
-    if (! $info = document_file("files.php", false)) {\r
-        error("404 - File Not Found");\r
-    }\r
-
-    $string = array();
-    if ($CFG->forcelogin) {\r
-        require_login();\r
-    }\r
-\r
-    include($info->filepath);\r
-\r
-    print_header();\r
-
-    $ulopen = false;
-
-    foreach ($string as $file => $filename) {\r
-        if (substr($file,0,1) == "-") {
-            if($ulopen) {
-                echo '</ul>';
-            }
-            echo '<h1>'.$filename.'</h1><ul>';
-            $ulopen = true;
-        } else {\r
-            echo '<li><a target="main" href="'.$CFG->wwwroot.'/doc/?file='.$file.'">'.$filename.'</a></li>';\r
-        }\r
-    }\r
-    if($ulopen) {
-        echo '</ul>';
-    }
-
-    // Sloppy way to produce valid markup... there should be a print_footer_minimal().
-    echo '</div></div></body></html>';
-    \r
-?>\r
diff --git a/doc/docstyles.css b/doc/docstyles.css
deleted file mode 100755 (executable)
index 5e388c8..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-body, td, th, li {
-    font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
-}
-
-th {
-    font-weight: bold; 
-}
-
-a:link {
-    text-decoration: none; 
-    color: blue;
-}
-
-a:visited {
-    text-decoration: none; 
-    color: blue;
-}
-
-a:hover {
-    text-decoration: underline; 
-    color: red;
-}
-
-form { 
-    margin-bottom: 0;
-}
-
-
-li {
-    margin-bottom: 10px;
-
-}
-
-.question {
-    font-size: medium;
-    font-weight: bold;
-    font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
-    border: 1px dotted;
-    padding: 10px;
-    background-color: #EEEEEE;
-}
-
-.answer {
-    font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
-    font-size: medium;
-    border: none;
-    padding-left: 40px;
-}
-
-.normaltext {
-    font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
-    font-size: medium;
-    border: none;
-    margin-left: 30px;
-
-}
-
-.answercode {
-    font-family: "Courier New", Courier, mono;
-    font-size: small;
-    border: none;
-    padding-left: 60px;
-}
-
-.questionlink {
-    font-family: "Trebuchet MS", Verdana, Arial, Helvetica, sans-serif;
-    font-size: medium;
-    border: none;
-    padding-left: 40px;
-}
-
-.examplecode {
-    font-family: "Courier New", Courier, mono;
-    font-size: small;
-    border: thin dashed #999999;
-    background-color: #FBFBFB;
-    margin: auto;
-    padding: 30px;
-    height: auto;
-    width: auto;
-}
-h1 {
-    font-weight: bold;
-    color: #000000;
-    background-color: #CCCCCC;
-    padding: 5px;
-    font-size: large;
-    border-width: 1px;
-    border-color: #CCCCCC;
-    -moz-border-radius: 10px;
-}
-h2 {
-    font-weight: bold;
-    color: #FFFFFF;
-    background-color: #666666;
-    padding: 5px;
-    font-size: medium;
-    border-width: 1px;
-    border-color: #666666;
-    -moz-border-radius: 10px;
-}
-h3 {
-    font-weight: normal;
-    color: #FFFFFF;
-    background-color: #666666;
-    padding: 5px;
-    font-size: medium;
-    -moz-border-radius: 10px;
-}
-.spaced {
-
-    margin-bottom: 30px;
-}
-
-ul {
-    margin-top: 10px;
-
-}
-.commandline {
-    font-family: "Courier New", Courier, mono;
-    font-size: x-small;
-    background-color: #FBFBFB;
-    margin: auto auto 20px 30px;
-    padding: 5px;
-    width: compact;
-    font-weight: bold;
-    border: 1px solid #999999;
-    white-space: nowrap;
-    clear: both;
-    float: none;
-}
diff --git a/doc/index.php b/doc/index.php
deleted file mode 100644 (file)
index b4cb0f0..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-<?PHP  // $Id$
-
-    require("../config.php");
-
-    $file  = optional_param('file', "", PARAM_FILE);  // docs file to view straight
-    $frame = optional_param('frame', "", PARAM_FILE); // docs file to view in frame
-    $sub   = optional_param('sub', "", PARAM_CLEAN);  // sub-section (named anchor)
-
-    if ($CFG->forcelogin) {
-        require_login();
-    }
-
-    if (!empty($sub)) {
-        $sub = '#'.s($sub);
-    } else {
-        $sub = "";
-    }
-
-    if (empty($file)) {
-        $include = false;
-        if (empty($frame)) {
-            $file = "intro.html";
-        } else {
-            $file = $frame;
-        }
-    } else {
-        $include = true;
-    }
-
-    if (! document_file($file, $include)) {
-        error("Error 404 - File Not Found");
-    }
-
-    if ($include) {
-        exit;
-    }
-
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" 
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-    <title><?php print_string("documentation")?></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo current_charset(); ?>" />
-</head>
-
-<frameset rows="70,*">
-    <frame name="top" src="top.php" />
-    <frameset cols="200,*">
-        <frame name="contents" src="contents.php" />
-        <frame name="main" src="index.php?file=<?php echo "$file$sub"; ?>" />
-    </frameset>
-</frameset>
-</html>
diff --git a/doc/install.html b/doc/install.html
deleted file mode 100755 (executable)
index 3df339d..0000000
+++ /dev/null
@@ -1,421 +0,0 @@
-<head>
-    
-<title>Moodle Docs: Installation</title>
-  
-<link rel="stylesheet" href="docstyles.css" type="TEXT/CSS">
-    
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-</head>
-
-<body bgcolor="#FFFFFF">
-<h1>Installing Moodle</h1>
-<blockquote>
-  <p>This guide explains how to install Moodle for the first time.  It goes into some detail
-   about some of the steps, in order to cover the wide variety of small differences between
-   web server setups, so this document may look long and complicated.  Don't be put off by this 
-   - I usually set Moodle up in a few minutes!</p>
-  <p>Take your time and work through this document carefully - it will save you time later on.</p>
-  <p>Sections in this document:</p>
-  <ol>
-    <li><a href="#requirements">Requirements</a></li>
-    <li><a href="#downloading">Download</a></li>
-    <li><a href="#site">Site structure</a></li>
-    <li><a href="#data">Create a data directory</a></li>
-    <li><a href="#database">Create a database</a></li>
-    <li><a href="#webserver">Check web server settings</a></li>
-    <li><a href="#config">Edit config.php</a></li>
-    <li><a href="#admin">Go to the admin page</a></li>
-    <li><a href="#cron">Set up cron</a></li>
-    <li><a href="#course">Create a new course</a></li>
-  </ol>
-  <p>&nbsp;</p>
-</blockquote>
-<h3 class="sectionheading"><a name="requirements"></a>1. Requirements</h3>
-<blockquote> 
-  <p>Moodle is primarily developed in Linux using Apache, MySQL and PHP (also 
-    sometimes known as the LAMP platform), but is also regularly tested with PostgreSQL 
-    and on Windows XP, Mac OS X and Netware 6 operating systems</p>
-  <p>The requirements for Moodle are as follows:</p>
-  <ol>
-    <li>Web server software. Most people use <a href="http://www.apache.org/" target="_blank">Apache</a>, 
-      but Moodle should work fine under any web server that supports PHP, such 
-      as IIS on Windows platforms.</li>
-    <li><a href="http://www.php.net/" target="_blank">PHP</a> scripting language (version 4.1.0 
-      or later), with the following settings: 
-      <ul>
-        <li><a href="http://www.boutell.com/gd/" target="_blank">GD library</a> 
-          turned ON, with support for JPG and PNG formats</li>
-        <li>zlib library turned ON (if you want to use backup/restore on Windows)</li>
-        <li>Sessions support turned ON</li>
-        <li>File uploading turned ON</li>
-        <li>Safe Mode must be turned OFF (see the forums on moodle.org for problems 
-          caused by Safe Mode)</li>
-      </ul>
-    </li>
-    <li>a working database server: <a href="http://www.mysql.com/" target="_blank">MySQL</a> 
-      or <a href="http://www.postgresql.org/" target="_blank">PostgreSQL</a> are 
-      completely supported and recommended for use with Moodle 1.1. All other 
-      databases will be supported fully in the next release.</li>
-  </ol>
-  <p>Most web hosts support all of this by default. If you are signed up with 
-    one of the few webhosts that does not support these features ask them why, 
-    and consider taking your business elsewhere.</p>
-  <p>If you want to run Moodle on your own computer and all this looks a bit daunting, 
-    then please see our guide: <a href="http://moodle.org/doc/?file=installamp.html">Installing 
-    Apache, MySQL and PHP</a>. It provides some step-by-step instructions to install 
-    all this on most popular platforms.</p>
-  <p>&nbsp;</p>
-</blockquote>
-<h3 class="sectionheading"><a name="downloading"></a>2. Download</h3>
-<blockquote>
-  <p>There are two ways to get Moodle, as a compressed package and via CVS. These 
-    are explained in detail on the download page: <a href="http://moodle.org/download/" target="_blank">http://moodle.org/download/</a></p>
-  <p>After downloading and unpacking the archive, or checking out the files via 
-    CVS, you will be left with a directory called &quot;moodle&quot;, containing 
-    a number of files and folders. </p>
-  <p>You can either place the whole folder in your web server documents directory, 
-    in which case the site will be located at <b>http://yourwebserver.com/moodle</b>, 
-    or you can copy all the contents straight into the main web server documents 
-    directory, in which case the site will be simply <b>http://yourwebserver.com</b>.</p>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="site"></a>3. Site structure</h3>
-<blockquote>
-  <p>Here is a quick summary of the contents of the Moodle folder, to help get 
-    you oriented:</p>
-  <blockquote>
-    <p>config.php - the ONLY file you need to edit to get started<br />
-      version.php - defines the current version of Moodle code<br />
-      index.php - the front page of the site</p>
-    <ul>
-      <li>admin/ - code to administrate the whole server </li>
-      <li>auth/ - plugin modules to authenticate users  </li>
-      <li>course/ - code to display and manage courses </li>
-      <li>doc/ - help documentation for Moodle (eg this page)</li>
-      <li>files/ - code to display and manage uploaded files</li>
-      <li>lang/ - texts in different languages, one directory per language </li>
-      <li>lib/ - libraries of core Moodle code </li>
-      <li>login/ - code to handle login and account creation </li>
-      <li>mod/ - all Moodle course modules</li>
-      <li>pix/ - generic site graphics</li>
-      <li>theme/ - theme packs/skins to change the look of the site.</li>
-      <li>user/ - code to display and manage users</li>
-    </ul>
-    <p>&nbsp;</p>
-  </blockquote>
-</blockquote>
-<h3 class="sectionheading"><a name="data"></a>4. Create a data directory</h3>
-<blockquote>
-  <p>Moodle will also need some space on your hard disk to store uploaded files, 
-    such as course documents and user pictures.</p>
-  <p>Create a directory for this purpose somewhere.  For security, it's best that 
-     this directory is NOT accessible directly via the web.  The easiest way to do this
-     is to simply locate it OUTSIDE the web directory, otherwise protect it 
-     by creating a file in the data directory called .htaccess, containing this line:
-  <blockquote>
-     
-    <pre>deny from all<br />AllowOverride None</pre>
-  </blockquote>
-  <p>To make sure that Moodle can save uploaded files in this directory, check that 
-     the web server software (eg Apache) has permission to write 
-    to this directory. On Unix machines, this means setting the owner of the directory 
-    to be something like &quot;nobody&quot; or &quot;apache&quot;.</p>
-  <p>On many shared hosting servers, you will probably need to restrict all file access 
-     to your "group" (to prevent other webhost customers from looking at or changing your files), 
-     but provide full read/write access to everyone else (which will allow the web server
-     to access your files).  Speak to your server administrator if you are having 
-     trouble setting this up securely.</p>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="database"></a>5. Create a database</h3>
-<blockquote>
-  <p>You need to create an empty database (eg "moodle") in your database system 
-    along with a special user (eg "moodleuser") that has access to that database 
-    (and that database only). You could use the "root" user if you wanted to, but 
-    this is not recommended for a production system: if hackers manage to discover
-    the password then your whole database system would be at risk, rather than 
-    just one database.
-</p>
-  <p>Example command lines for MySQL: </p>
-  <pre>
-   # mysql -u root -p
-   > CREATE DATABASE moodle; 
-   > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON moodle.* 
-           TO moodleuser@localhost IDENTIFIED BY 'yourpassword'; 
-   > quit 
-   # mysqladmin -p reload
-</pre>
-  <p>Example command lines for PostgreSQL: </p>
-  <pre>
-   # su - postgres
-   > psql -c "create user moodleuser createdb;" template1
-   > psql -c "create database moodle;" -U moodleuser template1
-   > psql -c "alter user moodleuser nocreatedb;" template1
-</pre>
-  <p>(For MySQL I highly recommend the use of <a href="http://phpmyadmin.sourceforge.net/">phpMyAdmin</a> 
-    to manage your databases - you can do all this via a web interface).</p>
-  <p>As of version 1.0.8, Moodle now supports table prefixes, and so can safely share 
-   a database with tables from other applications.</p>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="webserver" id="webserver"></a>6. Check your web server settings</h3>
-<blockquote>
-  <p>Firstly, make sure that your web server is set up to use index.php as a default 
-    page (perhaps in addition to index.html, default.htm and so on).</p>
-  <p>In Apache, this is done using a DirectoryIndex parameter in your httpd.conf 
-    file. Mine usually looks like this:</p>
-  <blockquote>
-    <pre><strong>DirectoryIndex</strong> index.php index.html index.htm </pre>
-  </blockquote>
-  <p>Just make sure index.php is in the list (and preferably towards the start 
-    of the list, for efficiency).</p>
-  <p>Secondly, <b>if you are using Apache 2</b>, then you should turn on the <i>AcceptPathInfo</i>
-     variable, which allows scripts to be passed arguments like http://server/file.php/arg1/arg2.
-     This is essential to allow relative links between your resources, and also 
-     provides a performance boost for people using your Moodle web site.  You can 
-     turn this on by adding these lines to your httpd.conf file.</p>
-  <blockquote>
-    <pre><strong>AcceptPathInfo</strong> on </pre>
-  </blockquote>
-  <p>Thirdly, Moodle requires a number of PHP settings to be active for it to 
-     work.  <b>On most servers these will already be the default settings.</b>
-     However, some PHP servers (and some of the more recent PHP versions) may 
-     have things set differently.  These are defined in PHP's configuration
-     file (usually called php.ini):</p>
-  <blockquote>
-
-    <pre>magic_quotes_gpc = 1    (preferred but not necessary)
-magic_quotes_runtime = 0    (necessary)
-file_uploads = 1
-session.auto_start = 0
-session.bug_compat_warn = 0
-</pre>
-  </blockquote>
-  <p>If you don't have access to httpd.conf or php.ini on your server, or you 
-    have Moodle on a server with other applications that require different settings, 
-    then don't worry, you can still OVERRIDE all of the default settings. 
-  <p>To do this, you need to create a file called <b>.htaccess</b> in Moodle's
-     main directory that contains definitions for these settings.
-     This only works on Apache servers and only when Overrides have been allowed.
-     
-  <blockquote>
-    <pre>
-DirectoryIndex index.php index.html index.htm
-
-&lt;IfDefine APACHE2>
-     <b>AcceptPathInfo</b> on
-&lt;/IfDefine>
-
-php_flag magic_quotes_gpc 1
-php_flag magic_quotes_runtime 0
-php_flag file_uploads 1
-php_flag session.auto_start 0
-php_flag session.bug_compat_warn 0</pre>
-  </blockquote>
-  <p>You can also do things like define the maximum size for uploaded files:
-     
-  <blockquote>
-    <pre>
-LimitRequestBody 0
-php_value upload_max_filesize 2M
-php_value post_max_size 2M
-     </pre>
-  </blockquote>
-  <p>The easiest thing to do is just copy the sample file from lib/htaccess 
-     and edit it to suit your needs.  It contains further instructions.  For 
-     example, in a Unix shell:
-  <blockquote>
-    <pre>cp lib/htaccess .htaccess</pre>
-  </blockquote>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="config"></a>7. Edit config.php</h3>
-<blockquote>
-  <p>Now you can edit the configuration file, <strong>config.php</strong>, using a 
-     text editor. This file is used by all other files in Moodle.</p>
-  <p>To start with, make a copy of <strong>config-dist.php</strong> and name it 
-    config.php. We do this so that your config.php won't be overwritten in case 
-    you upgrade Moodle later on. </p>
-  <p>Edit <strong>config.php</strong> to specify the database details that you 
-    just defined (including a table prefix - notice that this is REQUIRED for 
-    PostgreSQL), as well as the site address, file system directory and data directory. 
-    The config file itself has detailed directions and examples.</p>
-  <p>Once you have done this the rest of the installation is via a web interface. 
-    For the rest of this installation document we will assume your site is at: 
-    <u>http://example.com/moodle</u></p>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="admin"></a>8. Go to the admin page</h3>
-<blockquote> 
-  <p>The admin page should now be working at: <u>http://example.com/moodle/admin</u>. 
-    If you try and access the front page of your site you'll be taken there automatically 
-    anyway. The first time you access this admin page, you will be presented with 
-    a GPL &quot;shrinkwrap&quot; agreement with which you must agree before you 
-    can continue with the setup.</p>
-  <p>(Moodle will also try to set some cookies in your browser. If you have your 
-    browser set up to let you choose to accept cookies, then you <b>must</b> accept 
-    the Moodle cookies, or Moodle won't work properly.) 
-  <p>Now Moodle will start setting up your database and creating tables to store 
-    data. Firstly, the main database tables are created. You should see a number 
-    of SQL statements followed by status messages (in green or red) that look 
-    like this:</p>
-  <blockquote> 
-    <p>CREATE TABLE course ( id int(10) unsigned NOT NULL auto_increment, category 
-      int(10) unsigned NOT NULL default '0', password varchar(50) NOT NULL default 
-      '', fullname varchar(254) NOT NULL default '', shortname varchar(15) NOT 
-      NULL default '', summary text NOT NULL, format tinyint(4) NOT NULL default 
-      '1', teacher varchar(100) NOT NULL default 'Teacher', startdate int(10) 
-      unsigned NOT NULL default '0', enddate int(10) unsigned NOT NULL default 
-      '0', timemodified int(10) unsigned NOT NULL default '0', PRIMARY KEY (id)) 
-      TYPE=MyISAM</p>
-    <p><font color="#006600">SUCCESS</font></p>
-    <p>...and so on, followed by: <font color="#006600">Main databases set up 
-      successfully.</font> </p>
-  </blockquote>
-  <p>If you don't see these, then there must have been some problem with the database 
-    or the configuration settings you defined in config.php. Check that PHP isn't 
-    in a restricted "Safe Mode" (commercial web hosts sometimes have safe mode 
-    turned on). You can check PHP variables by creating a little file containing 
-    &lt? phpinfo() ?&gt and looking at it through a browser. Check all these and 
-    try this page again.</p>
-  <p>Scroll down the very bottom of the page and press the &quot;Continue&quot; 
-    link.</p>
-  <p>Next you will see a similar page that sets up all the tables required by 
-    each Moodle module. As before, they should all be <font color="#006600">green</font>.</p>
-  <p>Scroll down the very bottom of the page and press the &quot;Continue&quot; 
-    link.</p>
-  <p>You should now see a form where you can define more configuration variables 
-    for your installation, such as the default language, SMTP hosts and so on. 
-    Don't worry too much about getting everything right just now - you can always 
-    come back and edit these later on using the admin interface. Scroll down to 
-    the bottom and click &quot;Save changes&quot;.</p>
-  <p>If (and only if) you find yourself getting stuck on this page, unable to 
-    continue, then your server probably has what I call the "buggy referrer" problem. 
-    This is easy to fix: just turn off the &quot;secureforms&quot; setting, then 
-    try to continue again.</p>
-  <p>The next page is a form where you can define parameters for your Moodle site 
-    and the front page, such as the name, format, description and so on. Fill 
-    this out (you can always come back and change these later) and then press 
-    &quot;Save changes&quot;.</p>
-  <p>Finally, you will then be asked to create a top-level administration user 
-    for future access to the admin pages. Fill out the details with your own name, 
-    email etc and then click &quot;Save changes&quot;. Not all the fields are 
-    required, but if you miss any important fields you'll be re-prompted for them. 
-  </p>
-  <blockquote> 
-    <blockquote> 
-      <blockquote> 
-        <blockquote> 
-          <blockquote> 
-            <p><strong>Make sure you remember the username and password you chose 
-              for the administration user account, as they will be necessary to 
-              access the administration page in future.</strong></p>
-          </blockquote>
-        </blockquote>
-      </blockquote>
-    </blockquote>
-  </blockquote>
-  <p>(If for any reason your install is interrupted, or there is a system error 
-    of some kind that prevents you from logging in using the admin account, you 
-    can usually log in using the default username of &quot;<strong>admin</strong>&quot;, 
-    with password &quot;<strong>admin</strong>&quot;.)</p>
-  <p>Once successful, you will be returned to home page of your site. Note the 
-    administration links that appear down the left hand side of the page (these 
-    items also appear on a separate Admin page) - these items are only visible 
-    to you because you are logged in as the admin user. All your further administration 
-    of Moodle can now be done using this menu, such as:</p>
-  <ul>
-    <li>creating and deleting courses</li>
-    <li>creating and editing user accounts</li>
-    <li>administering teacher accounts</li>
-    <li>changing site-wide settings like themes etc</li>
-  </ul>
-</blockquote>
-<p>&nbsp;</p>
-<h3 class="sectionheading"><a name="cron"></a>9. Set up cron</h3>
-<blockquote> 
-  <p>Some of Moodle's modules require continual checks to perform tasks. For example, 
-    Moodle needs to check the discussion forums so it can mail out copies of posts 
-    to people who have subscribed.</p>
-  <p>The script that does all this is located in the admin directory, and is called 
-    cron.php. However, it can not run itself, so you need to set up a mechanism 
-    where this script is run regularly (eg every five or ten minutes). This provides 
-    a &quot;heartbeat&quot; so that the script can perform functions at periods 
-    defined by each module.</p>
-  <p>Note that the machine performing the cron <b>does not need to be the same 
-    machine that is running Moodle</b>. For example, if you have a limited web 
-    hosting service that does not have cron, then you can might choose to run 
-    cron on another server or on your home computer. All that matters is that 
-    the cron.php file is called regularly. </p>
-  <p>The load of this script is not very high, so 5 minutes is usually reasonable, 
-    but if you're worried about it you can reduce the time period to something 
-    like 15 minutes or even 30 minutes. It's best not to make the time period 
-    too long, as delaying mail-outs can slow down activity within the course.</p>
-  <p>First, test that the script works by running it directly from your browser:</p>
-  <blockquote> 
-    <pre>http://example.com/moodle/admin/cron.php</pre>
-  </blockquote>
-  <p>Now, you need to set up some of way of running the script automatically and 
-    regularly. </p>
-  <h4> Running the script from a command line</h4>
-  <p>You can call the page from the command line just as you did in the example 
-    above. For example, you can use a Unix utility like 'wget':</p>
-  <blockquote>
-    <pre>wget -q -O /dev/null http://example.com/moodle/admin/cron.php</pre>
-  </blockquote>
-  <p>Note in this example that the output is thrown away (to /dev/null).</p>
-  <p>The same thing using lynx:</p>
-  <blockquote>
-    <pre>lynx -dump http://example.com/moodle/admin/cron.php &gt; /dev/null</pre>
-  </blockquote>
-  <p>Alternatively you could use a standalone version of PHP, compiled to be run 
-    on the command line. The advantage with doing this is that your web server 
-    logs aren't filled with constant requests to cron.php. The disadvantage is 
-    that you need to have access to a command-line version of php.</p>
-  <blockquote>
-    <pre>/opt/bin/php /web/moodle/admin/cron.php
-
-
-(Windows) C:\apache\php\php.exe C:\apache\htdocs\moodle\admin\cron.php
-
-</pre>
-  </blockquote>
-  <h4>Automatically running the script every 5 minutes</h4>
-  <p><b>On Unix systems</b>: Use <b>cron</b>. Edit your cron settings from the commandline 
-    using &quot;crontab -e&quot; and add a line like:</p>
-  <blockquote>
-    <pre>*/5 * * * * wget -q -O /dev/null http://example.com/moodle/admin/cron.php</pre>
-  </blockquote>
-  <p>Usually, the "crontab" command will put you into the 'vi' editor. You enter 
-     "insert mode" by pressing "i", then type in the line as above, then exit insert mode by 
-     pressing ESC.  You save and exit by typing ":wq", or quit without saving using ":q!" (without the quotes).</p>
-  <p><b>On Windows systems</b>: The simplest way is to use this little package <a href="http://moodle.org/download/moodle-cron-for-windows.zip" title="Click to download this package (150k)" target="_blank">moodle-cron-for-windows.zip</a> 
-    which makes this whole thing very easy. You can also explore using the built-in 
-    Windows feature for "Scheduled Tasks".</p>
-  <p>On web hosts: Your web-based control panel may have a web page that allows 
-    you to set up this cron process. Ask your administrator for details on how 
-    it works.</p>
-  <p></p>
-</blockquote>
-<h3 class="sectionheading"><a name="course"></a>10. Create a new course</h3>
-<blockquote>
-  <p>Now that Moodle is running properly, you can create a course. </p>
-  <p>Select &quot;Create a new course&quot; from the Admin page (or the admin 
-    links on the home page).</p>
-  <p>Fill out the form, paying special attention to the course format. You don't 
-    have to worry about the details too much at this stage, as everything can 
-    be changed later by the teacher.</p>
-  <p>Press &quot;Save changes&quot;, and you will be taken to a new form where 
-    you can assign teachers to the course. You can only add existing user accounts 
-    from this form - if you want to create a new teacher account then either ask 
-    the teacher to create one for themselves (see the login page), or create one 
-    for them using the &quot;Add a new user&quot; on the Admin page.</p>
-  <p>Once done, the course is ready to customise, and is accessible via the &quot;Courses&quot; 
-    link on the home page.</p>
-  <p>See the &quot;<a href="./?file=teacher.html">Teacher Manual</a>&quot; for more details 
-    on course-building.</p>
-</blockquote>
-<p>&nbsp;</p>
-<p align="CENTER"><font size="1"><a href="." target="_top">Moodle Documentation</a></font></p>
-<p align="CENTER"><font size="1">Version: $Id$</font></p>
-</body>
diff --git a/doc/top.php b/doc/top.php
deleted file mode 100644 (file)
index bef501e..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-<?PHP  // $Id$
-
-    require("../config.php");
-
-    if ($CFG->forcelogin) {
-        require_login();
-    }
-
-    if (empty($CFG->langmenu)) {
-        $langmenu = "";
-    } else {
-        $currlang = current_language();
-        $langs    = get_list_of_languages();
-        $langmenu = popup_form ("$CFG->wwwroot/doc/?lang=", $langs, "chooselang", $currlang, "", "", "", true, "parent");
-    }
-
-    if (! $site = get_site()) {
-        error("Site is misconfigured");
-    }
-    $strdocumentation = get_string("documentation");
-    print_header("$site->shortname: $strdocumentation", "$site->fullname", "$strdocumentation", "", "", true, $langmenu, navmenu($site, NULL, "parent"));
-    
-?>
-
diff --git a/doc/view.php b/doc/view.php
deleted file mode 100644 (file)
index 6e91b59..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-<?PHP  // $Id$
-
-    require("../config.php");
-
-    $id = optional_param('id',0,PARAM_INT); // course context
-    $file = required_param('file',PARAM_FILE);    // file in this directory to view
-
-    $file = clean_filename($file);
-
-    if ($CFG->forcelogin) {
-        require_login();
-    }
-
-    if ($id) {
-        if (! $course = get_record("course", "id", $id)) {
-            error("Course is misconfigured");
-        }
-        $strhelp = get_string("help");
-        print_header("$course->shortname: $strhelp", "$course->fullname", 
-                     "<a href=\"../course/view.php?id=$course->id\">$course->shortname</a> -> $strhelp");
-    } else {
-        if (! $site = get_site()) {
-            error("Site is misconfigured");
-        }
-        $strdocumentation = get_string("documentation");
-        print_header("$site->shortname: $strhelp", "$site->fullname", 
-                     "<a href=\"view.php?file=contents.html\">$strdocumentation</a>");
-        
-    }
-
-    echo "<blockquote>";
-
-    if (! document_file($file, true)) {
-        notify("404 - File Not Found");
-    }
-
-    echo "</blockquote>";
-
-?>
-
diff --git a/enrol/authorize/db/migrate2utf8.xml b/enrol/authorize/db/migrate2utf8.xml
deleted file mode 100755 (executable)
index 02fad90..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<DBMIGRATION type="enrol/authorize" VERSION="2005120100">
-  <TABLES>
-    <TABLE name="enrol_authorize">
-      <FIELDS>
-        <FIELD name="ccname" method="NO_CONV" type="varchar" length="255" />
-        <FIELD name="transid" method="NO_CONV" type="varchar" length="255" />
-        <FIELD name="amount" method="NO_CONV" type="varchar" length="10" />
-        <FIELD name="currency" method="NO_CONV" type="char" length="3" />
-        <FIELD name="paymentmethod" method="NO_CONV" type="enum('cc', 'echeck')" length="0" default="cc"/>
-      </FIELDS>
-    </TABLE>
-    <TABLE name="enrol_authorize_refunds">
-      <FIELDS>
-        <FIELD name="amount" method="NO_CONV" type="varchar" length="10" />
-      </FIELDS>   
-    </TABLE>
-  </TABLES>
-</DBMIGRATION>
diff --git a/group/assign.php b/group/assign.php
new file mode 100644 (file)
index 0000000..d81e0c6
--- /dev/null
@@ -0,0 +1,182 @@
+<?php
+/**
+ * Add/remove members from group.
+ *
+ * @copyright &copy; 2006 The Open University
+ * @author N.D.Freear AT open.ac.uk
+ * @author J.White AT open.ac.uk 
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package groups
+ */
+require_once('../config.php');
+require_once('lib.php');
+require_once($CFG->libdir.'/moodlelib.php');
+
+$success = true;
+
+$courseid   = required_param('courseid', PARAM_INT);         
+$groupingid = required_param('grouping', PARAM_INT);
+$groupid    = required_param('group', PARAM_INT);
+
+// Get the course information so we can print the header and
+// check the course id is valid
+$course = groups_get_course_info($courseid);
+if (! $course) {
+    $success = false;
+    print_error('The course ID is invalid');
+}
+
+if ($success) {
+    // Make sure that the user has permissions to manage groups.
+    require_login($courseid);
+
+    $context = get_context_instance(CONTEXT_COURSE, $courseid);
+    if (! has_capability('moodle/course:managegroups', $context)) {
+        redirect();
+    }
+    
+    if ($frm = data_submitted() and confirm_sesskey()) { 
+
+        if (isset($frm->cancel)) {
+            redirect('index.php?id='. $courseid
+                .'&groupingid='. $groupingid .'&groupid='. $groupid);
+        }
+        elseif (isset($frm->add) and !empty($frm->addselect)) {
+
+            foreach ($frm->addselect as $userid) {
+                if (! $userid = clean_param($userid, PARAM_INT)) {
+                    continue;
+                }
+                //echo "Try user $userid, group $groupid<br>\n";
+                $success = groups_add_member($groupid, $userid);
+                if (! $success) {
+                    print_error('Failed to add user $userid to group.');
+                }
+            }
+        }
+        elseif (isset($frm->remove) and !empty($frm->removeselect)) {
+
+            foreach ($frm->removeselect as $userid) {
+                if (! $userid = clean_param($userid, PARAM_INT)) {
+                    continue;
+                }
+                $success = groups_remove_member($groupid, $userid);
+                if (! $success) {
+                    print_error('Failed to remove user $userid from group.');
+                }
+            }
+        }
+    }
+
+    // Print the page and form
+    $strgroups = get_string('groups');
+    $strparticipants = get_string('participants');
+
+    $groupname = groups_get_group_displayname($groupid);
+
+    print_header("$course->shortname: $strgroups", 
+                 "$course->fullname", 
+                 "<a href=\"$CFG->wwwroot/course/view.php?id=$courseid\">$course->shortname</a> ".
+                 "-> <a href=\"$CFG->wwwroot/user/index.php?id=$courseid\">$strparticipants</a> ".
+                 "-> $strgroups", '', '', true, '', user_login_string($course, $USER));
+
+    //require_once('assign-form.html');
+?>
+<div id="addmembersform">
+    <h3 class="main"><?php print_string('adduserstogroup', 'group'); echo " $groupname"; ?></h3>
+
+    <form name="assignform" id="assignform" method="post" action="">
+
+    <input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
+    <input type="hidden" name="courseid" value="<?php p($courseid); ?>" />
+    <input type="hidden" name="grouping" value="<?php echo $groupingid; ?>" />
+    <input type="hidden" name="group" value="<?php echo $groupid; ?>" />
+
+    <table summary="" align="center" cellpadding="5" cellspacing="0">
+    <tr>
+      <td valign="top">
+          <label for="removeselect"><?php print_string('existingusers', 'role'); //count($contextusers) ?></label>
+          <br />
+          <select name="removeselect[]" size="20" id="removeselect" multiple="multiple"
+                  onfocus="document.assignform.add.disabled=true;
+                           document.assignform.remove.disabled=false;
+                           document.assignform.addselect.selectedIndex=-1;">
+<?php
+    $userids = groups_get_members($groupid);
+    
+    if ($userids != false) {
+        // Put the groupings into a hash and sorts them
+        foreach ($userids as $userid) {
+            $listmembers[$userid] = groups_get_user_displayname($userid, $courseid);       
+        }
+        natcasesort($listmembers);
+
+        // Print out the HTML
+        foreach($listmembers as $id => $name) {
+            echo "<option value=\"$id\">$name</option>\n";
+        }
+    }
+?>
+          </select></td>
+      <td valign="top">
+<?php // Hidden assignment? ?>
+
+        <?php check_theme_arrows(); ?>
+        <p class="arrow_button">
+            <input name="add" id="add" type="submit" value="<?php echo '&nbsp;'.$THEME->larrow.' &nbsp; &nbsp; '.get_string('add'); ?>" title="<?php print_string('add'); ?>" />
+            <br />
+            <input name="remove" id="remove" type="submit" value="<?php echo '&nbsp; '.$THEME->rarrow.' &nbsp; &nbsp; '.get_string('remove'); ?>" title="<?php print_string('remove'); ?>" />
+        </p>
+      </td>
+      <td valign="top">
+          <label for="addselect"><?php print_string('potentialusers', 'role'); //$usercount ?></label>
+          <br />
+          <select name="addselect[]" size="20" id="addselect" multiple="multiple"
+                  onfocus="document.assignform.add.disabled=false;
+                           document.assignform.remove.disabled=true;
+                           document.assignform.removeselect.selectedIndex=-1;">
+    <?php
+    $showall = 0;
+    unset($userids);
+    if ($showall == 0 && $groupingid != GROUP_NOT_IN_GROUPING) {
+        $userids = groups_get_users_not_in_any_group_in_grouping($courseid, $groupingid, $groupid);
+    } else {
+        $userids = groups_get_users_not_in_group($courseid, $groupid);
+    }
+    
+    if ($userids != false) {
+        // Put the groupings into a hash and sorts them
+        foreach ($userids as $userid) {
+            $nonmembers[$userid] = groups_get_user_displayname($userid, $courseid);       
+        }
+        natcasesort($nonmembers);
+
+        // Print out the HTML
+        foreach($nonmembers as $id => $name) {
+            echo "<option value=\"$id\">$name</option>\n";
+        }
+    }
+    ?>
+         </select>
+         <br />
+         <?php //TODO: Search box 
+         
+              if (!empty($searchtext)) {
+                  echo '<input name="showall" id="showall" type="submit" value="'.$strshowall.'" />'."\n";
+              }
+         ?>
+       </td>
+    </tr>
+    <tr><td>
+        <input type="submit" name="cancel" value="<?php print_string('return', 'group'); ?>" />    
+    </td></tr>
+    </table>
+
+    </form>
+</div>
+
+<?php
+    print_footer($course);
+}
+
+?>
index cf1348f..f60566c 100644 (file)
@@ -2,7 +2,7 @@
 /**
  * Functions to make changes to groups in the database i.e. functions that 
  * access tables:
- *     groups_courses_groups, groups_groups and groups_groups_users.
+ *     groups_courses_groups, groups and groups_members.
  *
  * @copyright &copy; 2006 The Open University
  * @author J.White AT open.ac.uk
@@ -10,7 +10,7 @@
  * @package groups
  */
 require_once($CFG->libdir.'/datalib.php');
-require_once($CFG->dirroot.'/group/lib/lib.php');
+require_once($CFG->dirroot.'/group/lib.php');
 
 
 /*******************************************************************************
@@ -73,7 +73,7 @@ function groups_db_get_members($groupid) {
     if (!$groupid) {
         $userids = false;
     } else {
-        $users = get_records('groups_groups_users', 'groupid ', $groupid, '', 
+        $users = get_records('groups_members', 'groupid ', $groupid, '', 
                              $fields='id, userid');
         if (!$users) {
                $userids = false;
@@ -98,13 +98,13 @@ function groups_db_get_members($groupid) {
  */
 function groups_db_get_groups_for_user($userid, $courseid) {
     if (!$userid or !$courseid) {
-        $groupid = false;
+        $groupids = false;
     } else {  
         global $CFG;
         $table_prefix = $CFG->prefix;
         $sql = "SELECT g.id, userid 
-                FROM {$table_prefix}groups_groups_users AS gm 
-                INNER JOIN {$table_prefix}groups_groups AS g
+                FROM {$table_prefix}groups_members AS gm 
+                INNER JOIN {$table_prefix}groups AS g
                 ON gm.groupid = g.id
                 INNER JOIN {$table_prefix}groups_courses_groups AS cg
                 ON g.id = cg.groupid
@@ -131,19 +131,23 @@ function groups_db_get_groups_for_user($userid, $courseid) {
  * Get the group settings object for a group - this contains the following 
  * properties:
  * name, description, lang, theme, picture, hidepicture
- * @param int $groupid The id of the gruop
+ * @param int $groupid The id of the group
+ * @param $courseid Optionally add the course ID, for backwards compatibility.
  * @return object The group settings object 
  */
-function groups_db_get_group_settings($groupid) {
+function groups_db_get_group_settings($groupid, $courseid=false) {
    if (!$groupid) {
         $groupsettings = false;
     } else {
         global $CFG;
         $tableprefix = $CFG->prefix;
         $sql = "SELECT id, name, description, lang, theme, picture, hidepicture 
-                FROM {$tableprefix}groups_groups
+                FROM {$tableprefix}groups
                 WHERE id = $groupid";
         $groupsettings = get_record_sql($sql);
+        if ($courseid && $groupsettings) {
+            $groupsettings->courseid = $courseid;
+        }
     }
 
     return $groupsettings;     
@@ -188,7 +192,7 @@ function groups_db_group_exists($groupid) {
     if (!$groupid) {
         $exists = false;
     } else {
-        $exists = record_exists($table = 'groups_groups', 'id', $groupid);
+        $exists = record_exists($table = 'groups', 'id', $groupid);
     }
 
     return $exists;
@@ -205,7 +209,7 @@ function groups_db_is_member($groupid, $userid) {
     if (!$groupid or !$userid) {
         $ismember = false;
     } else {
-        $ismember = record_exists($table = 'groups_groups_users', 'groupid', 
+        $ismember = record_exists($table = 'groups_members', 'groupid', 
                                   $groupid, 'userid', $userid);
     }
     
@@ -253,7 +257,7 @@ function groups_db_create_group($courseid, $groupsettings = false) {
         $record->timecreated = time();
         $record->timemodified = time();
         //print_r($record);
-        $groupid = insert_record('groups_groups', $record);
+        $groupid = insert_record('groups', $record);
 
         if ($groupid != false) {
             $record2 = new Object();
@@ -289,7 +293,7 @@ function groups_db_add_member($groupid, $userid) {
                $record->groupid = $groupid;
                $record->userid = $userid;
                $record->timeadded = time();
-               $useradded = insert_record($table = 'groups_groups_users', $record);
+               $useradded = insert_record($table = 'groups_members', $record);
        }
 
        return $useradded;
@@ -311,7 +315,7 @@ function groups_db_set_group_settings($groupid, $groupsettings) {
        $record = $groupsettings;
         $record->id = $groupid;
         $record->timemodified = time();
-        $result = update_record('groups_groups', $record);
+        $result = update_record('groups', $record);
         if (!$result) {
             $success = false;
         }
@@ -336,7 +340,7 @@ function groups_db_remove_member($groupid, $userid) {
     if (!$userid or !$groupid) {
         $success = false;
     } else {
-        $results = delete_records('groups_groups_users', 
+        $results = delete_records('groups_members', 
                                   'groupid', $groupid, 'userid', $userid);
         // delete_records returns an array of the results from the sql call, 
         // not a boolean, so we have to set our return variable
@@ -392,7 +396,7 @@ function groups_db_delete_group($groupid) {
                }
 
         // Delete the group itself
-        $results = delete_records($table = 'groups_groups', $field1 = 'id', 
+        $results = delete_records($table = 'groups', $field1 = 'id', 
                                   $value1 = $groupid);
         // delete_records returns an array of the results from the sql call, 
         // not a boolean, so we have to set our return variable
@@ -404,4 +408,57 @@ function groups_db_delete_group($groupid) {
     return $success;
 }
 
+/**
+ * Internal function to set the time a group was modified.
+ */
+function groups_db_set_group_modified($groupid) {
+    return set_field('groups', 'timemodified', time(), 'id', $groupid);
+}
+
+
+/******************************************************************************
+ * Groups SQL clauses for modules and core.
+ */
+
+/**
+ * Returns the table in which group members are stored, with a prefix 'gm'.
+ * @return SQL string.
+ */
+function groups_members_from_sql() {
+    global $CFG;
+    return " {$CFG->prefix}groups_members gm ";
+}
+
+/**
+ * Returns a join testing user.id against member's user ID.
+ * Relies on 'user' table being included as 'user u'.
+ * Used in Quiz module reports.
+ * @param group ID, optional to include a test for this in the SQL.
+ * @return SQL string.
+ */
+function groups_members_join_sql($groupid=false) {    
+    $sql = ' JOIN '.groups_members_from_sql().' ON u.id = gm.userid ';
+    if ($groupid) {
+        $sql = "AND gm.groupid = '$groupid' ";
+    }
+    return $sql;
+    //return ' INNER JOIN '.$CFG->prefix.'role_assignments ra ON u.id=ra.userid'.
+    //       ' INNER JOIN '.$CFG->prefix.'context c ON ra.contextid=c.id AND c.contextlevel='.CONTEXT_GROUP.' AND c.instanceid='.$groupid;
+}
+
+/**
+ * Returns SQL for a WHERE clause testing the group ID.
+ * Optionally test the member's ID against another table's user ID column. 
+ * @param groupid
+ * @param userid_sql Optional user ID column selector, example "mdl_user.id", or false.
+ * @return SQL string.
+ */
+function groups_members_where_sql($groupid, $userid_sql=false) {
+    $sql = " gm.groupid = '$groupid' ";
+    if ($userid_sql) {
+        $sql .= "AND $userid_sql = gm.userid ";
+    }
+    return $sql;
+}
+
 ?>
\ No newline at end of file
index 409fe19..8cffcde 100644 (file)
@@ -24,12 +24,12 @@ require_once($CFG->libdir.'/datalib.php');
  */
 function groups_db_get_groupings($courseid) {
     if (!$courseid) {
-        $groupingid = false;
+        $groupingids = false;
     } else {
         $groupings = get_records('groups_courses_groupings', 'courseid ', 
                                  $courseid, '', $fields='id, groupingid');
                if (!$groupings) {
-                       $groupingsids = false;
+                       $groupingids = false;
                } else {
                // Put the results into an array
                $groupingids = array();
@@ -217,7 +217,7 @@ function groups_db_grouping_exists($groupingid) {
         $tableprefix = $CFG->prefix;
         $sql = "SELECT gm.id
         FROM {$tableprefix}groups_groupings_groups AS gg
-        INNER JOIN {$tableprefix}groups_groups_users AS gm
+        INNER JOIN {$tableprefix}groups_members AS gm
         ON gg.groupid = gm.groupid
         WHERE gm.userid = $userid AND gg.groupingid = $groupingid";
         $belongstogroup = record_exists_sql($sql);
index 274c100..cab2cdc 100644 (file)
@@ -6,7 +6,7 @@
  *
  * @copyright &copy; 2006 The Open University
  * @author J.White AT open.ac.uk
- * @author N.D.Freear@open.ac.uk
+ * @author N.D.Freear AT open.ac.uk
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package groups
  */
@@ -96,15 +96,15 @@ function groups_create_database_tables() {
 
         $creategroupingstablesql = "CREATE TABLE `{$CFG->prefix}groups_groupings` (
                             `id` int(10) unsigned NOT NULL auto_increment,
-                            `name` varchar(254) collate latin1_general_ci NOT NULL default '',
-                            `description` text collate latin1_general_ci NOT NULL,
-                            `timecreated` int(10) unsigned NOT NULL default '0',
-                            `viewowngroup` binary(1) NOT NULL,
-                            `viewallgroupsmembers` binary(1) NOT NULL,
-                            `viewallgroupsactivities` binary(1) NOT NULL,
-                            `teachersgroupmark` binary(1) NOT NULL,
-                            `teachersgroupview` binary(1) NOT NULL,
-                            `teachersoverride` binary(1) NOT NULL,
+                            `name` varchar(254) collate latin1_general_ci NOT NULL,
+                            `description` text collate latin1_general_ci NOT NULL default '',
+                            `timecreated` int(10) unsigned NOT NULL default 0,
+                            `viewowngroup` binary(1) NOT NULL default 1,
+                            `viewallgroupsmembers` binary(1) NOT NULL default 0,
+                            `viewallgroupsactivities` binary(1) NOT NULL default 0,
+                            `teachersgroupmark` binary(1) NOT NULL default 0,
+                            `teachersgroupview` binary(1) NOT NULL default 0,
+                            `teachersoverride` binary(1) NOT NULL default 0,
                             PRIMARY KEY  (`id`),
                             UNIQUE KEY `id` (`id`)
                           ) ";
@@ -132,7 +132,7 @@ function groups_create_database_tables() {
 
         $creategroupstablesql = "CREATE TABLE {$CFG->prefix}groups_groups (
                             id SERIAL PRIMARY KEY,
-                            name varchar(255) NOT NULL default '',
+                            name varchar(255) NOT NULL,
                             description text NOT NULL default '',
                             enrolmentkey varchar(50) NOT NULL default '',
                             lang varchar(10) NOT NULL default 'en',
@@ -165,15 +165,15 @@ function groups_create_database_tables() {
                                       
         $creategroupingstablesql = "CREATE TABLE {$CFG->prefix}groups_groupings (
                             id SERIAL PRIMARY KEY,
-                            name varchar(254) NOT NULL default '',
-                            description text NOT NULL,
-                            timecreated integer NOT NULL default '0',
-                            viewowngroup integer NOT NULL,
-                            viewallgroupsmembers integer NOT NULL,
-                            viewallgroupsactivities integer NOT NULL,
-                            teachersgroupmark integer NOT NULL,
-                            teachersgroupview integer NOT NULL,
-                            teachersoverride integer NOT NULL
+                            name varchar(254) NOT NULL default,
+                            description text NOT NULL default '',
+                            timecreated integer NOT NULL default 0,
+                            viewowngroup integer NOT NULL default 1,
+                            viewallgroupsmembers integer NOT NULL default 0,
+                            viewallgroupsactivities integer NOT NULL default 0,
+                            teachersgroupmark integer NOT NULL default 0,
+                            teachersgroupview integer NOT NULL default 0,
+                            teachersoverride integer NOT NULL default 0
                           ) ";
 
         $creategroupingsgroupstablesql = "CREATE TABLE {$CFG->prefix}groups_groupings_groups (
diff --git a/group/db/install.xml b/group/db/install.xml
new file mode 100644 (file)
index 0000000..9782943
--- /dev/null
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<XMLDB PATH="group/db" VERSION="20061209" COMMENT="XMLDB file for Moodle groups."
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
+>
+  <TABLES>
+    <TABLE NAME="groups" COMMENT="Each record represents a group." NEXT="groups_members">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="name"/>
+        <FIELD NAME="name" TYPE="char" LENGTH="254" NOTNULL="true" SEQUENCE="false" ENUM="false" COMMENT="Short human readable unique name for the group." PREVIOUS="id" NEXT="description"/>
+        <FIELD NAME="description" TYPE="text" LENGTH="small" NOTNULL="true" DEFAULT="" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="enrolmentkey"/>
+        <FIELD NAME="enrolmentkey" TYPE="char" LENGTH="50" NOTNULL="true" DEFAULT="" SEQUENCE="false" ENUM="false" PREVIOUS="description" NEXT="lang"/>
+        <FIELD NAME="lang" TYPE="char" LENGTH="10" NOTNULL="true" DEFAULT="en" SEQUENCE="false" ENUM="false" PREVIOUS="enrolmentkey" NEXT="theme"/>
+        <FIELD NAME="theme" TYPE="char" LENGTH="50" NOTNULL="true" DEFAULT="" SEQUENCE="false" ENUM="false" PREVIOUS="lang" NEXT="picture"/>
+        <FIELD NAME="picture" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="theme" NEXT="hidepicture"/>
+        <FIELD NAME="hidepicture" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="picture" NEXT="timecreated"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="hidepicture" NEXT="timemodified"/>
+        <FIELD NAME="timemodified" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="timecreated"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="groups_members" COMMENT="Link a user to a group." PREVIOUS="groups" NEXT="groups_groupings">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true" ENUM="false" NEXT="groupid"/>
+        <FIELD NAME="groupid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="userid"/>
+        <FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="groupid" NEXT="timeadded"/>
+        <FIELD NAME="timeadded" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="userid"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups_members"/>
+      </KEYS>
+      <INDEXES>
+        <INDEX NAME="groupid" UNIQUE="false" FIELDS="groupid" NEXT="userid"/>
+        <INDEX NAME="userid" UNIQUE="false" FIELDS="userid" PREVIOUS="groupid"/>
+      </INDEXES>
+    </TABLE>
+    <TABLE NAME="groups_groupings" COMMENT="A grouping is a collection of groups." PREVIOUS="groups_members" NEXT="groups_courses_groups">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="name"/>
+        <FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false" ENUM="false" COMMENT="Short human readable unique name for group." PREVIOUS="id" NEXT="description"/>
+        <FIELD NAME="description" TYPE="text" LENGTH="small" NOTNULL="true" DEFAULT="" SEQUENCE="false" ENUM="false" PREVIOUS="name" NEXT="timecreated"/>
+        <FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="description" NEXT="viewowngroup"/>
+        <FIELD NAME="viewowngroup" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="1" SEQUENCE="false" ENUM="false" PREVIOUS="timecreated" NEXT="viewallgroupsmembers"/>
+        <FIELD NAME="viewallgroupsmembers" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="viewowngroup" NEXT="viewallgroupsactivities"/>
+        <FIELD NAME="viewallgroupsactivities" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="viewallgroupsmembers" NEXT="teachersgroupmark"/>
+        <FIELD NAME="teachersgroupmark" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="viewallgroupsactivities" NEXT="teachersgroupview"/>
+        <FIELD NAME="teachersgroupview" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="teachersgroupmark" NEXT="teachersoverride"/>
+        <FIELD NAME="teachersoverride" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="teachersgroupview" NEXT="teacherdeletable"/>
+        <FIELD NAME="teacherdeletable" TYPE="int" LENGTH="1" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="teachersoverride"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups_groupings"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="groups_courses_groups" COMMENT="Link a group to a course (or the site)." PREVIOUS="groups_groupings" NEXT="groups_courses_groupings">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="courseid"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="groupid"/>
+        <FIELD NAME="groupid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" COMMENT="Default comment for the field, please edit me" PREVIOUS="courseid"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups_courses_groups"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="groups_courses_groupings" COMMENT="Link a grouping to a course (or the site)." PREVIOUS="groups_courses_groups" NEXT="groups_groupings_groups">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="courseid"/>
+        <FIELD NAME="courseid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="groupingid"/>
+        <FIELD NAME="groupingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="courseid"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups_courses_groupings"/>
+      </KEYS>
+    </TABLE>
+    <TABLE NAME="groups_groupings_groups" COMMENT="Link a group to a grouping." PREVIOUS="groups_courses_groupings">
+      <FIELDS>
+        <FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="true" ENUM="false" COMMENT="id of the table, please edit me" NEXT="groupingid"/>
+        <FIELD NAME="groupingid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="id" NEXT="groupid"/>
+        <FIELD NAME="groupid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="false" ENUM="false" PREVIOUS="groupingid" NEXT="timeadded"/>
+        <FIELD NAME="timeadded" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" DEFAULT="0" SEQUENCE="false" ENUM="false" PREVIOUS="groupid"/>
+      </FIELDS>
+      <KEYS>
+        <KEY NAME="primary" TYPE="primary" FIELDS="id" COMMENT="Primary key for groups_groupings_groups"/>
+      </KEYS>
+    </TABLE>
+  </TABLES>
+  <STATEMENTS>
+    <STATEMENT NAME="insert log_display" TYPE="insert" TABLE="log_display" COMMENT="Initial insert of records on table log_display">
+      <SENTENCES>
+        <SENTENCE TEXT="(module, action, mtable, field) VALUES ('group', 'view', 'groups', 'name')" />
+      </SENTENCES>
+    </STATEMENT>
+  </STATEMENTS>
+</XMLDB>
index 1173d49..bf9b691 100644 (file)
@@ -19,7 +19,7 @@
 CREATE TABLE `prefix_groups_courses_groupings` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `courseid` int(10) unsigned NOT NULL default '0',
-  `groupingid` mediumint(9) NOT NULL,
+  `groupingid` mediumint(9) NOT NULL default '0',
   PRIMARY KEY  (`id`),
   UNIQUE KEY `id` (`id`),
   KEY `courseid` (`courseid`)
@@ -34,7 +34,7 @@ CREATE TABLE `prefix_groups_courses_groupings` (
 CREATE TABLE `prefix_groups_courses_groups` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `courseid` int(10) unsigned NOT NULL default '0',
-  `groupid` int(11) NOT NULL,
+  `groupid` int(11) NOT NULL default '0',
   PRIMARY KEY  (`id`),
   UNIQUE KEY `id` (`id`),
   KEY `courseid` (`courseid`)
@@ -48,16 +48,16 @@ CREATE TABLE `prefix_groups_courses_groups` (
 
 CREATE TABLE `prefix_groups_groupings` (
   `id` int(10) unsigned NOT NULL auto_increment,
-  `name` varchar(254) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `description` text character set latin1 collate latin1_general_ci NOT NULL,
+  `name` varchar(254) NOT NULL,
+  `description` text NOT NULL default '',
   `timecreated` int(10) unsigned NOT NULL default '0',
-  `viewowngroup` tinyint(1) NOT NULL,
-  `viewallgroupsmembers` tinyint(1) NOT NULL,
-  `viewallgroupsactivities` tinyint(1) NOT NULL,
-  `teachersgroupmark` tinyint(1) NOT NULL,
-  `teachersgroupview` binary(1) NOT NULL,
-  `teachersoverride` binary(1) NOT NULL,
-  `teacherdeletable` binary(1) NOT NULL,
+  `viewowngroup` tinyint(1) NOT NULL default 1,
+  `viewallgroupsmembers` tinyint(1) NOT NULL default 0,
+  `viewallgroupsactivities` tinyint(1) NOT NULL default 0,
+  `teachersgroupmark` tinyint(1) NOT NULL default 0,
+  `teachersgroupview` binary(1) NOT NULL default 0,
+  `teachersoverride` binary(1) NOT NULL default 0,
+  `teacherdeletable` binary(1) NOT NULL default 0,
   PRIMARY KEY  (`id`),
   UNIQUE KEY `id` (`id`)
 ) ENGINE=MyISAM ;
@@ -71,7 +71,7 @@ CREATE TABLE `prefix_groups_groupings` (
 CREATE TABLE `prefix_groups_groupings_groups` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `groupingid` int(10) unsigned default '0',
-  `groupid` int(10) NOT NULL,
+  `groupid` int(10) NOT NULL default '0',
   `timeadded` int(10) unsigned NOT NULL default '0',
   PRIMARY KEY  (`id`),
   UNIQUE KEY `id` (`id`),
@@ -81,16 +81,16 @@ CREATE TABLE `prefix_groups_groupings_groups` (
 # --------------------------------------------------------
 
 # 
-# Table structure for table `prefix_groups_groups`
+# Table structure for table `prefix_groups`
 # 
 
-CREATE TABLE `prefix_groups_groups` (
+CREATE TABLE `prefix_groups` (
   `id` int(10) unsigned NOT NULL auto_increment,
-  `name` varchar(254) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `description` text character set latin1 collate latin1_general_ci NOT NULL,
-  `enrolmentkey` varchar(50) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `lang` varchar(10) character set latin1 collate latin1_general_ci NOT NULL default 'en',
-  `theme` varchar(50) character set latin1 collate latin1_general_ci NOT NULL default '',
+  `name` varchar(255) NOT NULL,
+  `description` text NOT NULL default '',
+  `enrolmentkey` varchar(50) NOT NULL default '',
+  `lang` varchar(10) NOT NULL default 'en',
+  `theme` varchar(50) NOT NULL default '',
   `picture` int(10) unsigned NOT NULL default '0',
   `hidepicture` int(1) unsigned NOT NULL default '0',
   `timecreated` int(10) unsigned NOT NULL default '0',
@@ -102,10 +102,10 @@ CREATE TABLE `prefix_groups_groups` (
 # --------------------------------------------------------
 
 # 
-# Table structure for table `prefix_groups_groups_users`
+# Table structure for table `prefix_groups_members`
 # 
 
-CREATE TABLE `prefix_groups_groups_users` (
+CREATE TABLE `prefix_groups_members` (
   `id` int(10) unsigned NOT NULL auto_increment,
   `groupid` int(10) unsigned NOT NULL default '0',
   `userid` int(10) unsigned NOT NULL default '0',
index b4594e8..a21609b 100644 (file)
@@ -1,59 +1,65 @@
 
-CREATE TABLE prefix_groups_courses_groups (
-                            id SERIAL PRIMARY KEY,
-                            courseid integer NOT NULL default '0',
-                            groupid integer NOT NULL default '0'
-                          );
-CREATE INDEX prefix_groups_courses_groups_courseid_idx ON prefix_groups_courses_groups (courseid);
-
-CREATE TABLE prefix_groups_groups (
-                            id SERIAL PRIMARY KEY,
-                            name varchar(255) NOT NULL default '',
-                            description text NOT NULL default '',
-                            enrolmentkey varchar(50) NOT NULL default '',
-                            lang varchar(10) NOT NULL default 'en',
-                            theme varchar(50) NOT NULL default '',
-                            picture integer NOT NULL default '0',
-                            hidepicture integer NOT NULL default '0',
-                            timecreated integer NOT NULL default '0',
-                            timemodified integer NOT NULL default '0'
-                          );
-
-CREATE TABLE prefix_groups_groups_users (
-                            id SERIAL PRIMARY KEY,
-                            groupid integer NOT NULL default '0',
-                            userid integer NOT NULL default '0',
-                            timeadded integer NOT NULL default '0'
-                          );
-CREATE INDEX prefix_groups_groups_users_groupid_idx ON prefix_groups_groups_users (groupid);
-CREATE INDEX prefix_groups_groups_users_userid_idx ON prefix_groups_groups_users (userid);
-COMMENT ON TABLE prefix_groups_groups_users IS 'New groupings (OU).';
 
 CREATE TABLE prefix_groups_courses_groupings (
-                            id SERIAL PRIMARY KEY,
-                            courseid integer NOT NULL default '0',
-                            groupingid integer NOT NULL
-                          );
+    id SERIAL PRIMARY KEY,
+    courseid integer NOT NULL default 0,
+    groupingid integer NOT NULL default 0
+);
 CREATE INDEX prefix_groups_courses_groupings_courseid_idx ON prefix_groups_courses_groupings (courseid);
 COMMENT ON TABLE prefix_groups_courses_groupings IS 'New groupings (OU).';
-                                      
+
+
+CREATE TABLE prefix_groups_courses_groups (
+    id SERIAL PRIMARY KEY,
+    courseid integer NOT NULL default '0',
+    groupid integer NOT NULL default '0'
+);
+CREATE INDEX prefix_groups_courses_groups_courseid_idx ON prefix_groups_courses_groups (courseid);
+
+
 CREATE TABLE prefix_groups_groupings (
-                            id SERIAL PRIMARY KEY,
-                            name varchar(254) NOT NULL default '',
-                            description text NOT NULL,
-                            timecreated integer NOT NULL default '0',
-                            viewowngroup integer NOT NULL,
-                            viewallgroupsmembers integer NOT NULL,
-                            viewallgroupsactivities integer NOT NULL,
-                            teachersgroupmark integer NOT NULL,
-                            teachersgroupview integer NOT NULL,
-                            teachersoverride integer NOT NULL
-                          );
+    id SERIAL PRIMARY KEY,
+    name varchar(254) NOT NULL,
+    description text NOT NULL default '',
+    timecreated integer NOT NULL default 0,
+    viewowngroup integer NOT NULL default 1,
+    viewallgroupsmembers integer NOT NULL default 0,
+    viewallgroupsactivities integer NOT NULL default 0,
+    teachersgroupmark integer NOT NULL default 0,
+    teachersgroupview integer NOT NULL default 0,
+    teachersoverride integer NOT NULL default 0
+);
+
 
 CREATE TABLE prefix_groups_groupings_groups (
-                            id SERIAL PRIMARY KEY,
-                            groupingid integer default '0',
-                            groupid integer NOT NULL,
-                            timeadded integer NOT NULL default '0'
-                          );
+    id SERIAL PRIMARY KEY,
+    groupingid integer NOT NULL default 0,
+    groupid integer NOT NULL default 0,
+    timeadded integer NOT NULL default 0
+);
 CREATE INDEX prefix_groups_groupings_groups_groupingid_idx ON prefix_groups_groupings_groups (groupingid);
+
+
+CREATE TABLE prefix_groups (
+    id SERIAL PRIMARY KEY,
+    name varchar(255) NOT NULL,
+    description text NOT NULL default '',
+    enrolmentkey varchar(50) NOT NULL default '',
+    lang varchar(10) NOT NULL default 'en',
+    theme varchar(50) NOT NULL default '',
+    picture integer NOT NULL default '0',
+    hidepicture integer NOT NULL default '0',
+    timecreated integer NOT NULL default '0',
+    timemodified integer NOT NULL default '0'
+);
+
+
+CREATE TABLE prefix_groups_members (
+    id SERIAL PRIMARY KEY,
+    groupid integer NOT NULL default '0',
+    userid integer NOT NULL default '0',
+    timeadded integer NOT NULL default '0'
+);
+CREATE INDEX prefix_groups_members_groupid_idx ON prefix_groups_members (groupid);
+CREATE INDEX prefix_groups_members_userid_idx ON prefix_groups_members (userid);
+COMMENT ON TABLE prefix_groups_members IS 'New groupings (OU).';
diff --git a/group/db/upgrade.php b/group/db/upgrade.php
new file mode 100644 (file)
index 0000000..a5486df
--- /dev/null
@@ -0,0 +1,223 @@
+<?php  //$Id: upgrade.php,v 1.2 2007/01/03 04:55:20 moodler Exp $
+
+// This file keeps track of upgrades to 
+// groups
+//
+// 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.
+//
+// The commands in here will all be database-neutral,
+// using the functions defined in lib/ddllib.php
+
+function upgrade_group_db($continueto) {
+/// This function upgrades the group tables, if necessary
+/// It's called from admin/index.php.
+
+    global $CFG, $db;
+
+    $group_version = '';  // Get code versions
+    require_once ("$CFG->dirroot/group/version.php");
+
+    if (empty($CFG->group_version)) {  // New groups have never been installed...
+        $status = false;
+
+        $strdatabaseupgrades = get_string('databaseupgrades');
+        print_header($strdatabaseupgrades, $strdatabaseupgrades, $strdatabaseupgrades, '', 
+                '<script type="text/javascript" src="' . $CFG->wwwroot . '/lib/scroll_to_errors.js"></script>',
+                false, "&nbsp;", "&nbsp;");
+
+        upgrade_log_start();
+        print_heading('group');
+        $db->debug=true;
+
+        //TODO: for testing, revert to 'old' groups.
+        if (! get_config('group_version')) {
+            $status = revert_group_db();
+        }
+
+        //... But Moodle is already installed.
+        if (table_exists($t_groups = new XMLDBTable('groups'))) {
+            $status = rename_table($t_groups, 'groups_temp');
+            $status = rename_table(new XMLDBTable('groups_members'), 'groups_members_temp');
+        }
+
+    /// Both old .sql files and new install.xml are supported
+    /// but we prioritize install.xml (XMLDB) if present
+
+        if (file_exists($CFG->dirroot . '/group/db/install.xml')) {
+            $status = install_from_xmldb_file($CFG->dirroot . '/group/db/install.xml'); //New method
+        } else if (file_exists($CFG->dirroot . '/group/db/' . $CFG->dbtype . '.sql')) {
+            $status = modify_database($CFG->dirroot . '/group/db/' . $CFG->dbtype . '.sql'); //Old method
+        }
+
+        $status = transfer_group_db();
+
+        $db->debug = false;
+    
+        if (set_config('group_version', $group_version)) { //and set_config('group_release', $group_release)) {
+            //initialize default group settings now
+            $adminroot = admin_get_root();
+            apply_default_settings($adminroot->locate('groups'));
+            notify(get_string('databasesuccess'), 'green');
+            notify(get_string('databaseupgradegroups', '', $group_version), 'green');
+            print_continue($continueto);
+            exit;
+        } else {
+            error("Upgrade of group system failed! (Could not update version in config table)");
+        }
+    }
+
+/// Upgrading code starts here
+    $oldupgrade = false;
+    $newupgrade = false;
+    if (is_readable($CFG->dirroot . '/group/db/' . $CFG->dbtype . '.php')) {
+        include_once($CFG->dirroot . '/group/db/' . $CFG->dbtype . '.php');  // defines old upgrading function
+        $oldupgrade = true;
+    }
+    if (is_readable($CFG->dirroot . '/group/db/upgrade.php')) {
+        include_once($CFG->dirroot . '/group/db/upgrade.php');  // defines new upgrading function
+        $newupgrade = true;
+    }
+
+    if ($group_version > $CFG->group_version) {       // Upgrade tables
+        $strdatabaseupgrades = get_string('databaseupgrades');
+        print_header($strdatabaseupgrades, $strdatabaseupgrades, $strdatabaseupgrades, '',
+                 '<script type="text/javascript" src="' . $CFG->wwwroot . '/lib/scroll_to_errors.js"></script>');
+
+        upgrade_log_start();
+        print_heading('group');
+
+    /// Run de old and new upgrade functions for the module
+        $oldupgrade_function = 'group_upgrade';
+        $newupgrade_function = 'xmldb_group_upgrade';
+
+    /// First, the old function if exists
+        $oldupgrade_status = true;
+        if ($oldupgrade && function_exists($oldupgrade_function)) {
+            $db->debug = true;
+            $oldupgrade_status = $oldupgrade_function($CFG->group_version);
+        } else if ($oldupgrade) {
+            notify ('Upgrade function ' . $oldupgrade_function . ' was not available in ' .
+                    '/group/db/' . $CFG->dbtype . '.php');
+        }
+
+    /// Then, the new function if exists and the old one was ok
+        $newupgrade_status = true;
+        if ($newupgrade && function_exists($newupgrade_function) && $oldupgrade_status) {
+            $db->debug = true;
+            $newupgrade_status = $newupgrade_function($CFG->group_version);
+        } else if ($newupgrade) {
+            notify ('Upgrade function ' . $newupgrade_function . ' was not available in ' .
+                    '/group/db/upgrade.php');
+        }
+
+        $db->debug=false;
+    /// Now analyze upgrade results
+        if ($oldupgrade_status && $newupgrade_status) {    // No upgrading failed
+            if (set_config('group_version', $group_version)) { //and set_config('group_release', $group_release))
+                notify(get_string('databasesuccess'), 'green');
+                notify(get_string('databaseupgradegroups', '', $group_version), 'green');
+                print_continue($continueto);
+                exit;
+            } else {
+                error("Upgrade of group system failed! (Could not update version in config table)");
+            }
+        } else {
+            error("Upgrade failed!  See group/version.php");
+        }
+
+        upgrade_log_finish();
+        print_footer();
+
+    } else if ($group_version < $CFG->group_version) {
+        upgrade_log_start();
+        notify("WARNING!!!  The code you are using is OLDER than the version that made these databases!");
+
+        upgrade_log_finish();
+        print_footer();
+    }
+}
+
+
+function transfer_group_db() {
+    $status = true;
+    
+    if (table_exists($t_groups = new XMLDBTable('groups_temp'))) {
+        $status = (bool)$groups_r = get_records('groups_temp');
+        $status = (bool)$members_r= get_records('groups_members_temp');
+
+        if (! $groups_r) {
+            return $status;
+        }
+        foreach ($groups_r as $group) {
+            if (debugging()) {
+                print_object($group);
+            }
+            $group->enrolmentkey = $group->password;
+            ///unset($group->password);
+            ///unset($group->courseid);
+            $status = (bool)$newgroupid = groups_create_group($group->courseid, $group);
+            if ($members_r) {
+                foreach ($members_r as $member) {
+                    if ($member->groupid == $group->id) {
+                        $status = groups_add_member($newgroupid, $member->userid);
+                    }
+                }
+            }
+            echo 'Status: '.$status;
+        }
+        ///$status = drop_table($t_groups);
+        ///$status = drop_table(new XMLDBTable('groups_members_temp'));
+    }
+    return $status;
+}
+
+
+/**
+ * For testing, it's useful to be able to revert to 'old' groups.
+ */
+function revert_group_db() {
+    $status = false;
+    //$status = (bool)$rs = delete_records('config', 'name', 'group_version');
+    if (!get_config('group_version') && table_exists(new XMLDBTable('groups_groupings'))) { //debugging()
+        $status = drop_table(new XMLDBTable('groups'));
+        $status = drop_table(new XMLDBTable('groups_members'));
+        $status = drop_table(new XMLDBTable('groups_groupings'));
+        $status = drop_table(new XMLDBTable('groups_courses_groups'));
+        $status = drop_table(new XMLDBTable('groups_courses_groupings'));
+        $status = drop_table(new XMLDBTable('groups_groupings_groups'));
+
+        $status = rename_table(new XMLDBTable('groups_temp'), 'groups');
+        $status = rename_table(new XMLDBTable('groups_members_temp'), 'groups_members');
+    }
+    return $status;
+}
+
+
+function xmldb_group_upgrade($oldversion=0) {
+
+    //global $CFG, $THEME, $db;
+
+    $result = true;
+
+/// And upgrade begins here. For each one, you'll need one 
+/// block of code similar to the next one. Please, delete 
+/// this comment lines once this file start handling proper
+/// upgrade code.
+
+/// if ($result && $oldversion < YYYYMMDD00) { //New version in version.php
+///     $result = result of "/lib/ddllib.php" function calls
+/// }
+
+    return $result;
+}
+
+?>
diff --git a/group/group.php b/group/group.php
new file mode 100644 (file)
index 0000000..7c51a00
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+/**
+ * Create group OR edit group settings.
+ *
+ * @copyright &copy; 2006 The Open University
+ * @author N.D.Freear AT open.ac.uk
+ * @author J.White AT open.ac.uk 
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package groups
+ */
+require_once('../config.php');
+require_once('lib.php');
+require_once($CFG->libdir.'/moodlelib.php');
+require_once($CFG->libdir.'/uploadlib.php');
+
+$success = true;
+$err = array();
+
+$courseid   = required_param('courseid', PARAM_INT);         
+$groupingid = optional_param('grouping', false, PARAM_INT);
+$groupid    = optional_param('group', false, PARAM_INT);
+
+$groupsettings->name       = optional_param('name', PARAM_ALPHANUM);
+$groupsettings->description= optional_param('description', PARAM_ALPHANUM);
+$groupsettings->enrolmentkey= optional_param('enrolmentkey', PARAM_ALPHANUM);
+$groupsettings->hidepicture= optional_param('hidepicture', PARAM_BOOL);
+
+$delete = optional_param('delete', false, PARAM_BOOL);
+
+// Get the course information so we can print the header and
+// check the course id is valid
+$course = groups_get_course_info($courseid);
+if (! $course) {
+    $success = false;
+    print_error('The course ID is invalid');
+}
+
+if ($success) {
+    // Make sure that the user has permissions to manage groups.
+    require_login($courseid);
+
+    $context = get_context_instance(CONTEXT_COURSE, $courseid);
+    if (! has_capability('moodle/course:managegroups', $context)) {
+        redirect();
+    }
+
+/// If data submitted, then process and store.
+
+    if ($frm = data_submitted() and confirm_sesskey()) { 
+
+        if (isset($frm->cancel)) {
+            redirect(groups_home_url($courseid, $groupid, $groupingid, false));
+        }
+        elseif (isset($frm->confirmdelete)) {
+            ///TODO:
+        }
+        elseif (empty($frm->name)) {
+            $err['name'] = get_string('missingname');
+        }
+        elseif (isset($frm->update)) {
+            if (GROUP_NOT_IN_GROUPING == $groupingid) {
+                print_error('errornotingrouping', 'group', groups_home_url($courseid), get_string('notingrouping', 'group'));
+            }
+            if (! $groupid) {
+                $success = (bool)$groupid = groups_create_group($courseid); //$groupsettings);
+                $success = groups_add_group_to_grouping($groupid, $groupingid);
+            }
+            if ($success) {
+                //require_once($CFG->dirroot.'/lib/uploadlib.php');
+
+                $um = new upload_manager('imagefile',false,false,null,false,0,true,true);
+                if ($um->preprocess_files()) {
+                    require_once("$CFG->libdir/gdlib.php");
+                
+                    if (save_profile_image($groupid, $um, 'groups')) {
+                        $groupsettings->picture = 1;
+                    } 
+                }
+
+                $success = (bool)groups_set_group_settings($groupid, $groupsettings);
+            }
+            if ($success) {
+                redirect(groups_home_url($courseid, $groupid, $groupingid, false));
+            }
+            else {
+                print_error('Error creating/updating group.');
+            }
+        }
+    }
+
+/// OR, prepare the form.
+
+    if ($groupid) {
+        // Form to edit existing group.
+        $group = groups_get_group_settings($groupid);
+        if (! $group) {
+            print_error('The group ID is invalid.');
+        }
+        $strname = s($group->name);
+        $strdesc = s($group->description);
+
+        $strbutton  = get_string('save', 'group'); 
+        $strheading = get_string('editgroupsettings', 'group');
+    } else {
+        // Form to create a new one.
+        $strname = get_string('defaultgroupname', 'group');
+        $strdesc = '';
+        $strbutton = $strheading = get_string('creategroup', 'group');
+    }
+    $strgroups = get_string('groups');
+    $strparticipants = get_string('participants');
+    if ($delete) {
+        $strheading = get_string('deleteselectedgroup', 'group');
+    } //else { $strheader = get_string('groupinfoedit'); }
+
+    $maxbytes = get_max_upload_file_size($CFG->maxbytes, $course->maxbytes);
+    if (!empty($CFG->gdversion) and $maxbytes) {
+        $printuploadpicture = true;
+    } else {
+        $printuploadpicture = false;
+    }
+
+/// Print the page and form
+
+    print_header("$course->shortname: ". $strheading,
+                 "$course->fullname", 
+                 "<a href=\"$CFG->wwwroot/course/view.php?id=$courseid\">$course->shortname</a> ".
+                 "-> <a href=\"$CFG->wwwroot/user/index.php?id=$courseid\">$strparticipants</a> ".
+                 "-> $strgroups", '', '', true, '', user_login_string($course, $USER));
+
+    $usehtmleditor = false;
+?>
+<h3 class="main"><?php echo $strheading ?></h3>
+
+<form action="group.php" method="post" class="mform notmform" id="groupform">
+
+<input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
+<input type="hidden" name="courseid" value="<?php p($courseid); ?>" />
+<input type="hidden" name="grouping" value="<?php p($groupingid); ?>" />
+<?php
+    if ($groupid) {
+        echo '<input type="hidden" name="group" value="'. $groupid .'" />';
+    }
+
+    if ($delete) {
+        /*echo 'Are you sure you want to delete group X ?';
+        choose_from_menu_yesno('confirmdelete', false, '', true);*/
+?>
+
+        <p>Are you sure you want to delete group '<?php p($strname) ?>'?</p>
+        <input type="hidden" name="delete" value="1" />
+        <input type="submit" name="confirmdelete" value="Yes" />
+        <input type="submit" name="cancel" value="<?php print_string('cancel', 'group'); ?>" />
+<?php
+    } else {
+?>
+
+<div class="fitem">
+<p><label for="groupname"><?php
+   print_string('groupname', 'group');
+   if (isset($err['name'])) {
+       echo' ';
+       formerr($err['name']);
+   } ?>&nbsp; </label></p>
+<p class="felement"><input id="groupname" name="name" type="text" size="40" value="<?php echo $strname; ?>" /></p>
+</div>
+
+<p><label for="edit-description"><?php print_string('groupdescription', 'group'); ?>&nbsp;</label></p>
+<p><?php print_textarea($usehtmleditor, 5, 45, 200, 400, 'description', $strdesc); ?></p>
+
+<p><label for="enrolmentkey"><?php print_string('enrolmentkey', 'group'); ?>&nbsp;</label></p>
+<p><input id="enrolmentkey" name="enrolmentkey" type="text" size="25" /></p>
+
+<?php if ($printuploadpicture) {  ?>
+    <p><label for="menuhidepicture"><?php print_string('hidepicture', 'group'); ?>&nbsp;</label></p>
+    <p><?php $options = array();
+             $options[0] = get_string('no');
+             $options[1] = get_string('yes');
+             choose_from_menu($options, 'hidepicture', isset($group)? $group->hidepicture: 1, '');?></p>
+
+    <p><label ><?php /* for="groupicon" */ print_string('newpicture', 'group');
+        helpbutton('picture', get_string('helppicture'));
+        print_string('maxsize', '', display_size($maxbytes), 'group');
+        if (isset($err['imagefile'])) formerr($err['imagefile']);
+     ?>&nbsp;</label></p>
+    <p><?php upload_print_form_fragment(1, array('groupicon'), null,false,null,0,0,false); ?></p>
+<?php 
+    }  
+?>
+
+<p class="fitem">
+  <label for="id_submit">&nbsp;</label>
+  <span class="f--element fsubmit">
+    <input type="submit" name="update" id="id_submit" value="<?php echo $strbutton; ?>" />
+    <input type="submit" name="cancel" value="<?php print_string('cancel', 'group'); ?>" />
+  </span>
+</p>
+
+<?php } //IF($delete) ?>
+
+<span class="clearer">&nbsp;</span>
+
+</form>
+<?php
+    print_footer($course);
+}
+
+?>
diff --git a/group/grouping.php b/group/grouping.php
new file mode 100644 (file)
index 0000000..dbdfd7a
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Create grouping OR edit grouping settings.
+ *
+ * @copyright &copy; 2006 The Open University
+ * @author N.D.Freear AT open.ac.uk
+ * @author J.White AT open.ac.uk 
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package groups
+ */
+require_once('../config.php');
+require_once('lib.php');
+require_once($CFG->libdir.'/moodlelib.php');
+
+$success = true;
+$courseid   = required_param('courseid', PARAM_INT);         
+$groupingid = optional_param('grouping', false, PARAM_INT);
+
+$groupingsettings->name       = optional_param('name', PARAM_ALPHANUM);
+$groupingsettings->description= optional_param('description', PARAM_ALPHANUM);
+
+// Get the course information so we can print the header and
+// check the course id is valid
+$course = groups_get_course_info($courseid);
+if (! $course) {
+    $success = false;
+    print_error('The course ID is invalid');
+}
+
+if ($success) {
+    // Make sure that the user has permissions to manage groups.
+    require_login($courseid);
+
+    $context = get_context_instance(CONTEXT_COURSE, $courseid);
+    if (! has_capability('moodle/course:managegroups', $context)) {
+        redirect();
+    }
+    
+/// If data submitted, then process and store.
+
+    if ($frm = data_submitted() and confirm_sesskey()) { 
+
+        if (isset($frm->cancel)) {
+            redirect(groups_home_url($courseid, null, $groupingid, false));
+        }
+        elseif (empty($frm->name)) {
+            $err['name'] = get_string('missingname');
+        }
+        elseif (isset($frm->update)) {
+        
+            if ($groupingid) {
+                $success = (bool)groups_set_grouping_settings($groupingid, $groupingsettings);
+            }
+            else {
+                $success = (bool)$groupingid = groups_create_grouping($courseid, $groupingsettings);
+            }
+            if ($success) {
+                redirect(groups_home_url($courseid, null, $groupingid, false));
+            }
+            else {
+                print_error('Error creating/updating grouping.');
+            }
+        }
+    }
+
+/// OR, prepare the form.
+
+    if ($groupingid) {
+        // Form to edit existing grouping.
+        $grouping = groups_get_grouping_settings($groupingid);
+        if (! $grouping) {
+            print_error('errorinvalidgrouping', 'group', groups_home_url($courseid));
+        }
+        $strname = s($grouping->name);
+        $strdesc = s($grouping->description);
+
+        $strbutton  = get_string('save', 'group'); 
+        $strheading = get_string('editgroupingsettings', 'group');
+    } else {
+        // Form to create a new one.
+        $strname = get_string('defaultgroupingname', 'group');
+        $strdesc = '';
+        $strbutton = $strheading = get_string('creategrouping', 'group');
+    }
+    $strgroups = get_string('groups');
+    $strparticipants = get_string('participants');
+
+/// Print the page and form
+
+    print_header("$course->shortname: $strgroups", 
+                 "$course->fullname", 
+                 "<a href=\"$CFG->wwwroot/course/view.php?id=$courseid\">$course->shortname</a> ".
+                 "-> <a href=\"$CFG->wwwroot/user/index.php?id=$courseid\">$strparticipants</a> ".
+                 "-> $strgroups", '', '', true, '', user_login_string($course, $USER));
+
+    $usehtmleditor = false;
+?>
+<h3 class="main"><?php echo $strheading ?></h3>
+
+<form action="grouping.php" method="post" class="mform notmform" id="groupingform">
+<input type="hidden" name="sesskey" value="<?php p(sesskey()); ?>" />
+<input type="hidden" name="courseid" value="<?php p($courseid); ?>" />
+<?php
+    if ($groupingid) {
+        echo '<input type="hidden" name="grouping" value="'. $groupingid .'" />';
+    }
+?>
+
+<div class="f-item">
+<p><label for="groupingname"><?php print_string('groupingname', 'group'); ?>&nbsp;</label></p>
+<p><input id="groupingname" name="name" type="text" size="40" value="<?php echo $strname; ?>" /></p>
+</div>
+
+<p><label for="edit-description"><?php print_string('groupingdescription', 'group'); ?>&nbsp;</label></p>
+<p><?php print_textarea($usehtmleditor, 5, 45, 200, 400, 'description', $strdesc); ?></p>
+
+<p class="fitem">
+  <label for="id_submit">&nbsp;</label>
+  <span class="f-element fsubmit">
+    <input type="submit" name="update" id="id_submit" value="<?php echo $strbutton; ?>" />
+    <input type="submit" name="cancel" value="<?php print_string('cancel', 'group'); ?>" />
+  </span>
+</p>
+<span class="clearer">&nbsp;</span>
+
+</form>
+<?php
+    print_footer($course);
+}
+
+?>
diff --git a/group/install.php b/group/install.php
deleted file mode 100644 (file)
index c578b55..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-/**
- * Functions required for setting up the database to use the new groups.
- *
- * @copyright &copy; 2006 The Open University
- * @author J.White AT open.ac.uk
- * @author N.D.Freear@open.ac.uk
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- * @package groups
- */
-require_once('../config.php');
-require_once($CFG->dirroot.'/group/db/dbsetup.php');
-require_once($CFG->dirroot.'/group/lib/utillib.php');
-
-// Set up the database 
-groups_create_database_tables();
-
-
-// Change database tables - course table need to remove two fields add groupingid field
-// Move everything over
-// Course module instance need to add groupingid field
-// Module table - add group support field. 
-// Add deletable by teacher field. 
-
-/**
- * Copies the moodle groups to a new grouping within IMS groups
- * @param int $courseid The id of the course
- * @return int The id of the grouping to which the groups have been copied, or false if an error occurred. 
- */
-function groups_copy_moodle_groups_to_groups($courseid) {
-    $groupingsettings = new Object();
-       $groupingsettings->name = 'Old moodle groups';
-       $groupingid = groups_create_grouping($courseid, $groupingsettings);
-
-       $groupids = groups_get_moodle_groups($courseid);
-       if (!$groupids) {
-               $groupingid = false;
-       } else {
-               
-               foreach($groupids as $groupid) {
-                       $groupcopied = groups_db_copy_moodle_group_to_imsgroup($groupid, $courseid);
-                       if (!$groupcopied) {
-                               $groupingid = false;
-                       }
-                       
-                       $groupadded = groups_add_group_to_grouping($groupid, $groupingid);
-                       if (!$groupadded) {
-                               $groupingid = false;
-                       }
-               }
-       }
-       
-       return $groupingid;
-}      
-
-?>
\ No newline at end of file
diff --git a/group/install.sql b/group/install.sql
deleted file mode 100644 (file)
index 22feae9..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
--- phpMyAdmin SQL Dump
--- version 2.8.1
--- http://www.phpmyadmin.net
--- 
--- Host: localhost
--- Generation Time: Oct 24, 2006 at 05:23 PM
--- Server version: 5.0.21
--- PHP Version: 4.4.2-pl1
--- 
--- Database: `moodle`
--- 
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_course`
--- 
-
-CREATE TABLE `mdl_course` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `category` int(10) unsigned NOT NULL default '0',
-  `sortorder` int(10) unsigned NOT NULL default '0',
-  `password` varchar(50) collate utf8_unicode_ci NOT NULL default '',
-  `fullname` varchar(254) collate utf8_unicode_ci NOT NULL default '',
-  `shortname` varchar(100) collate utf8_unicode_ci NOT NULL default '',
-  `idnumber` varchar(100) collate utf8_unicode_ci NOT NULL default '',
-  `summary` text collate utf8_unicode_ci NOT NULL,
-  `format` varchar(10) collate utf8_unicode_ci NOT NULL default 'topics',
-  `showgrades` smallint(2) unsigned NOT NULL default '1',
-  `modinfo` longtext collate utf8_unicode_ci NOT NULL,
-  `newsitems` smallint(5) unsigned NOT NULL default '1',
-  `teacher` varchar(100) collate utf8_unicode_ci NOT NULL default 'Teacher',
-  `teachers` varchar(100) collate utf8_unicode_ci NOT NULL default 'Teachers',
-  `student` varchar(100) collate utf8_unicode_ci NOT NULL default 'Student',
-  `students` varchar(100) collate utf8_unicode_ci NOT NULL default 'Students',
-  `guest` tinyint(2) unsigned NOT NULL default '0',
-  `startdate` int(10) unsigned NOT NULL default '0',
-  `enrolperiod` int(10) unsigned NOT NULL default '0',
-  `numsections` smallint(5) unsigned NOT NULL default '1',
-  `marker` int(10) unsigned NOT NULL default '0',
-  `maxbytes` int(10) unsigned NOT NULL default '0',
-  `showreports` int(4) unsigned NOT NULL default '0',
-  `visible` int(1) unsigned NOT NULL default '1',
-  `hiddensections` int(2) unsigned NOT NULL default '0',
-  `groupmode` int(4) unsigned NOT NULL default '0',
-  `groupmodeforce` int(4) unsigned NOT NULL default '0',
-  `lang` varchar(10) collate utf8_unicode_ci NOT NULL default '',
-  `theme` varchar(50) collate utf8_unicode_ci NOT NULL default '',
-  `cost` varchar(10) collate utf8_unicode_ci NOT NULL default '',
-  `currency` char(3) collate utf8_unicode_ci NOT NULL default 'USD',
-  `timecreated` int(10) unsigned NOT NULL default '0',
-  `timemodified` int(10) unsigned NOT NULL default '0',
-  `metacourse` int(1) unsigned NOT NULL default '0',
-  `requested` int(1) unsigned NOT NULL default '0',
-  `restrictmodules` int(1) unsigned NOT NULL default '0',
-  `expirynotify` tinyint(1) unsigned NOT NULL default '0',
-  `expirythreshold` int(10) unsigned NOT NULL default '0',
-  `notifystudents` tinyint(1) unsigned NOT NULL default '0',
-  `enrollable` tinyint(1) unsigned NOT NULL default '1',
-  `enrolstartdate` int(10) unsigned NOT NULL default '0',
-  `enrolenddate` int(10) unsigned NOT NULL default '0',
-  `enrol` varchar(20) collate utf8_unicode_ci NOT NULL default '',
-  PRIMARY KEY  (`id`),
-  KEY `category` (`category`),
-  KEY `idnumber` (`idnumber`),
-  KEY `shortname` (`shortname`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_course_modules`
--- 
-
-CREATE TABLE `mdl_course_modules` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `course` int(10) unsigned NOT NULL default '0',
-  `module` int(10) unsigned NOT NULL default '0',
-  `instance` int(10) unsigned NOT NULL default '0',
-  `section` int(10) unsigned NOT NULL default '0',
-  `added` int(10) unsigned NOT NULL default '0',
-  `score` tinyint(4) NOT NULL default '0',
-  `indent` int(5) unsigned NOT NULL default '0',
-  `visible` tinyint(1) NOT NULL default '1',
-  `visibleold` tinyint(1) NOT NULL default '1',
-  `groupingid` int(10) NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`),
-  KEY `visible` (`visible`),
-  KEY `course` (`course`),
-  KEY `module` (`module`),
-  KEY `instance` (`instance`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_courses_groupings`
--- 
-
-CREATE TABLE `mdl_groups_courses_groupings` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `courseid` int(10) unsigned NOT NULL default '0',
-  `groupingid` mediumint(9) NOT NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`),
-  KEY `courseid` (`courseid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=87 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_courses_groups`
--- 
-
-CREATE TABLE `mdl_groups_courses_groups` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `courseid` int(10) unsigned NOT NULL default '0',
-  `groupid` int(11) NOT NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`),
-  KEY `courseid` (`courseid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=132 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_groupings`
--- 
-
-CREATE TABLE `mdl_groups_groupings` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `name` varchar(254) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `description` text character set latin1 collate latin1_general_ci NOT NULL,
-  `timecreated` int(10) unsigned NOT NULL default '0',
-  `viewowngroup` tinyint(1) NOT NULL,
-  `viewallgroupsmembers` tinyint(1) NOT NULL,
-  `viewallgroupsactivities` tinyint(1) NOT NULL,
-  `teachersgroupmark` tinyint(1) NOT NULL,
-  `teachersgroupview` binary(1) NOT NULL,
-  `teachersoverride` binary(1) NOT NULL,
-  `teacherdeletable` binary(1) NOT NULL,
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=87 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_groupings_groups`
--- 
-
-CREATE TABLE `mdl_groups_groupings_groups` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `groupingid` int(10) unsigned default '0',
-  `groupid` int(10) NOT NULL,
-  `timecreated` int(10) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`),
-  KEY `courseid` (`groupingid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=67 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_groups`
--- 
-
-CREATE TABLE `mdl_groups_groups` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `name` varchar(254) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `description` text character set latin1 collate latin1_general_ci NOT NULL,
-  `enrolmentkey` varchar(50) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `lang` varchar(10) character set latin1 collate latin1_general_ci NOT NULL default 'en',
-  `theme` varchar(50) character set latin1 collate latin1_general_ci NOT NULL default '',
-  `picture` int(10) unsigned NOT NULL default '0',
-  `hidepicture` int(1) unsigned NOT NULL default '0',
-  `timecreated` int(10) unsigned NOT NULL default '0',
-  `timemodified` int(10) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=132 ;
-
--- --------------------------------------------------------
-
--- 
--- Table structure for table `mdl_groups_groups_users`
--- 
-
-CREATE TABLE `mdl_groups_groups_users` (
-  `id` int(10) unsigned NOT NULL auto_increment,
-  `groupid` int(10) unsigned NOT NULL default '0',
-  `userid` int(10) unsigned NOT NULL default '0',
-  `timeadded` int(10) unsigned NOT NULL default '0',
-  PRIMARY KEY  (`id`),
-  UNIQUE KEY `id` (`id`),
-  KEY `groupid` (`groupid`),
-  KEY `userid` (`userid`)
-) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=175 ;
diff --git a/group/lib.php b/group/lib.php
new file mode 100644 (file)
index 0000000..d01b021
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Library including new groups and groupings.
+ *
+ * @copyright &copy; 2006 The Open University
+ * @author J.White AT open.ac.uk
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package groups
+ */
+
+require_once($CFG->dirroot.'/group/lib/basicgrouplib.php');
+
+require_once($CFG->dirroot.'/group/lib/groupinglib.php');
+
+require_once($CFG->dirroot.'/group/lib/utillib.php');
+
+require_once($CFG->dirroot.'/group/lib/automaticgroupinglib.php');
+
+require_once($CFG->dirroot.'/group/lib/legacylib.php');
+
+?>
index 02e005c..18bf935 100644 (file)
@@ -28,10 +28,10 @@ require_once($CFG->dirroot.'/group/db/dbbasicgrouplib.php');
  *****************************/
 
 /**
- * Gets a list of the group ids for a specified course id 
- * @param int $courseid The id of the course. 
- * @return array | false Returns an array of the userids or false if no records
- * or an error occurred. 
+ * Gets a list of the group IDs for a specified course.
+ * @param int $courseid The id of the course.
+ * @return array | false Returns an array of the group IDs or false if no records
+ * or an error occurred.
  */
 function groups_get_groups($courseid) {
        $groupids = groups_db_get_groups($courseid);
@@ -50,6 +50,7 @@ function groups_get_groups($courseid) {
  */
 function groups_get_members($groupid, $membertype = false) {
        $userids = groups_db_get_members($groupid);
+
     return $userids;
 }
 
@@ -67,6 +68,19 @@ function groups_get_groups_for_user($userid, $courseid) {
     return $groupids;
 }
 
+function groups_get_all_groups_for_user($userid) {
+    $groups = get_records('groups_members', 'userid', $userid);
+    if (! $groups) {
+        return false;
+    }
+    // Put the results into an array
+    $groupids = array();
+    foreach ($groups as $group) {
+        array_push($groupids, $group->id);    
+    }
+    return $groupids;
+}
+
 /**
  * Gets the groups for the current user and specified course 
  * @param int $courseid The id of the course
@@ -89,8 +103,8 @@ function groups_get_groups_for_current_user($courseid) {
  * @param int $groupid The id of the gruop
  * @return object The group settings object 
  */
-function groups_get_group_settings($groupid) {
-       return groups_db_get_group_settings($groupid);
+function groups_get_group_settings($groupid, $courseid=false) {
+       return groups_db_get_group_settings($groupid, $courseid);
 }
 
 /**
@@ -100,8 +114,8 @@ function groups_get_group_settings($groupid) {
  * @return string The path of the image for the group
  */
 function groups_get_group_image_path($groupid) {
-    $image = ''; //TODO: ??
-       return $CFG->dataroot.'/groups/'.$groupid.'/'.$image;
+    //TODO: groupid=1, /user/pixgroup.php/1/f1.jpg ??
+       return $CFG->wwwroot.'/pixgroup.php/'.$groupid.'/f1.jpg';
 }
 
 /**
@@ -111,7 +125,10 @@ function groups_get_group_image_path($groupid) {
  */
 function groups_get_group_name($groupid) {
        $settings = groups_get_group_settings($groupid);
-       return $settings->name;
+       if ($settings) {
+        return $settings->name;
+    }
+    return false;
 }
 
 /**
@@ -168,8 +185,9 @@ function groups_group_exists($groupid) {
  * @return boolean True if the user is a member of the group, false otherwise
  */
  function groups_is_member($groupid, $userid) { 
-       $ismember = groups_db_is_member($groupid, $userid);
-       return $ismember;
+    $ismember = groups_db_is_member($groupid, $userid);
+    
+    return $ismember;
 }
 
 
@@ -254,7 +272,7 @@ function groups_create_group($courseid, $groupsettings = false) {
  * @return boolean True if info was added successfully, false otherwise. 
  */
 function groups_set_group_settings($groupid, $groupsettings) { 
-       return  groups_db_set_group_settings($groupid, $groupsettings);
+       return groups_db_set_group_settings($groupid, $groupsettings);
 }
 
 
@@ -277,7 +295,9 @@ function groups_add_member($groupid, $userid) {
     } else {
                $useradded = groups_db_add_member($groupid, $userid);
     }
-
+    if ($useradded) {
+        $useradded = groups_db_set_group_modified($groupid);
+    }
        return $useradded;
 }
 
@@ -294,11 +314,22 @@ function groups_add_member($groupid, $userid) {
  * See comment above on web service autoupdating. 
  */
 function groups_delete_group($groupid) {
-       $groupdeleted = groups_db_delete_group($groupid);
+    $groupdeleted = groups_db_delete_group($groupid);
 
     return $groupdeleted;
 }
 
+/*function groups_delete_groups($groupids) {
+    if (! $groupids) {
+        return false;
+    }
+    $success = true;
+    foreach ($groupids as $id) {
+        $success = $success && groups_db_delete_group($id);
+    }
+    return $success;
+}*/
+
 
 /**
  * Deletes the specified user from the specified group
@@ -308,7 +339,29 @@ function groups_delete_group($groupid) {
  * See comment above on web service autoupdating. 
  */
 function groups_remove_member($groupid, $userid) {
-       return  groups_db_remove_member($groupid, $userid);
+       $success = groups_db_remove_member($groupid, $userid);    
+    if ($success) {
+        $success = groups_db_set_group_modified($groupid);
+    }
+    return $success;
+}
+
+function groups_remove_all_members($groupid) {
+    if (! groups_group_exists($groupid)) {
+        //Woops, delete group last!
+        return false;
+    }
+    $userids = groups_get_members($groupid);
+    if (! $userids) {
+        return false;
+    }
+    $success = true;
+    foreach ($userids as $id) {
+        $success = $success && groups_db_remove_member($groupid, $id);
+    }
+    $success = $success && groups_db_set_group_modified($groupid);
+    return $success;
 }
 
+
 ?>
\ No newline at end of file
index 48eb863..59eac11 100644 (file)
@@ -12,6 +12,7 @@
 require_once($CFG->dirroot.'/group/lib/basicgrouplib.php');
 require_once($CFG->dirroot.'/group/db/dbgroupinglib.php');
 
+define('GROUP_NOT_IN_GROUPING', -1);
 
 /*****************************
         Access/List functions  
@@ -73,7 +74,7 @@ function groups_get_groups_for_user_in_grouping($userid, $groupingid) {
 }
 
 /**
- * Gets a list of the groups not a specified grouping
+ * Gets a list of the groups not in a specified grouping
  * @param int $groupingid The grouping specified
  * @return array An array of the group ids
  */
@@ -88,6 +89,33 @@ function groups_get_groups_not_in_grouping($groupingid, $courseid) {
     return $groupids;
 }
 
+/**
+ * TODO: move to dbgroupinglib.php
+ */
+function groups_get_groups_not_in_any_grouping($courseid) {
+    global $CFG;
+/* SELECT g.id
+     FROM headmdl_groups AS g
+     WHERE g.id NOT IN 
+       (SELECT groupid FROM headmdl_groups_groupings_groups);
+*/
+    $sql = "SELECT g.id
+        FROM {$CFG->prefix}groups AS g
+        WHERE g.id NOT IN 
+        (SELECT groupid FROM {$CFG->prefix}groups_groupings_groups)";
+
+    $records = get_records_sql($sql);
+    $groupids = array();
+    if ($records) {
+        foreach ($records as $r) {
+            $groupids[] = $r->id;
+        }
+    } else {
+        return false;
+    }
+    return $groupids;
+}
+
 /**
  * Gets the users for the course who are not in any group of a grouping.
  * @param int $courseid The id of the course
@@ -101,19 +129,18 @@ function groups_get_users_not_in_any_group_in_grouping($courseid, $groupingid,
        $users = get_course_users($courseid);
     $userids = groups_users_to_userids($users); 
     $nongroupmembers = array();
-    if ($userids) {
-           foreach($userids as $userid) {
-               if (!groups_is_member_of_some_group_in_grouping($userid, 
-                                                               $groupingid)) {
-                       // If a group has been specified don't include members of that 
-                       // group
-                       if ($groupid  and !groups_is_member($userid, $groupid)) {
-                       array_push($nongroupmembers, $userid);
-                       } else {
-                               array_push($nongroupmembers, $userid);
-                       }
-               }
-           }
+    if (! $userids) {
+        return $nongroupmembers;
+    }
+    foreach($userids as $userid) {
+           if (!groups_is_member_of_some_group_in_grouping($userid, $groupingid)) {
+               // If a group has been specified don't include members of that group
+               if ($groupid  and !groups_is_member($userid, $groupid)) {
+                       array_push($nongroupmembers, $userid);
+               } else {
+                       ///array_push($nongroupmembers, $userid);
+               }
+        }
     }
     return $nongroupmembers;
 }
@@ -282,7 +309,10 @@ function groups_create_grouping($courseid, $groupingsettings = false) {
  * doesn't belong to the same course as the grouping. 
  */
 function groups_add_group_to_grouping($groupid, $groupingid) {
-       $belongstogrouping = groups_belongs_to_grouping($groupid, $groupingid);
+       if (GROUP_NOT_IN_GROUPING == $groupingid) {
+        return false;
+    }
+    $belongstogrouping = groups_belongs_to_grouping($groupid, $groupingid);
        if (!groups_grouping_exists($groupingid)) {
                $groupadded = false;
        } elseif (!$belongstogrouping) {
index a18e8e6..2b61631 100644 (file)
@@ -1,9 +1,13 @@
 <?php
 /**
- * Legacy groups functions - these were in moodlelib.php.
+ * Legacy groups functions - these were in moodlelib.php, datalib.php, weblib.php
  *
  * @@@ Don't look at this file - still tons to do! 
  *
+ * TODO: For the moment these functions are in /lib/deprecatedlib.php
+ *   get_group_students
+ *   get_group_teachers
+ *
  * @copyright &copy; 2006 The Open University
  * @author J.White AT open.ac.uk and others
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * This is needed to support upload of users into the database
  * @param int $courseid The id of the course
  * @param string $groupname
- * @return int $groupname
+ * @return int $groupid
  */
 function groups_get_group_by_name($courseid, $groupname) {
-       // TO DO                                 
+       //uploaduser.php, get_record("groups","courseid",$course[$i]->id,"name",$addgroup[$i])
+    $groupids = groups_db_get_groups($courseid);
+    if (! $groupids) {
+        return false;
+    }
+    foreach ($groupids as $id) {
+        if (groups_get_group_name($id) == $groupname) {
+            return $id;
+        }
+    }
+    return false;
 }
 
 /**
@@ -41,8 +55,8 @@ function get_groups($courseid, $userid=0) {
        } else {
                $groupids = groups_get_groups($courseid);
        }
-       
-       return groups_groupids_to_groups($groupids);
+
+       return groups_groupids_to_groups($groupids, $courseid);
 }
 
 
@@ -110,68 +124,6 @@ function get_group_users($groupid, $sort='u.lastaccess DESC', $exceptions='',
 
 
 
-/**
- * Returns an array of user objects
- *
- * @uses $CFG
- * @param int $groupid The group(s) in question.
- * @param string $sort How to sort the results
- * @return object (changed to groupids)
- */
-function get_group_students($groupids, $sort='u.lastaccess DESC') {
-
-    global $CFG;
-
-    if (is_array($groupids)){
-        $groups = $groupids;
-        $groupstr = '(m.groupid = '.array_shift($groups);
-        foreach ($groups as $index => $value){
-            $groupstr .= ' OR m.groupid = '.$value;
-        }
-        $groupstr .= ')';
-    }
-    else {
-        $groupstr = 'm.groupid = '.$groupids;
-    }
-
-    return get_records_sql("SELECT DISTINCT u.*
-                              FROM {$CFG->prefix}user u,
-                                   {$CFG->prefix}groups_members m,
-                                   {$CFG->prefix}groups g,
-                                   {$CFG->prefix}user_students s
-                             WHERE $groupstr
-                               AND m.userid = u.id
-                               AND m.groupid = g.id
-                               AND g.courseid = s.course
-                               AND s.userid = u.id
-                          ORDER BY $sort");
-}
-
-/**
- * Returns list of all the teachers who can access a group
- *
- * @uses $CFG
- * @param int $courseid The course in question.
- * @param int $groupid The group in question.
- * @return object
- */
-function get_group_teachers($courseid, $groupid) {
-/// Returns a list of all the teachers who can access a group
-    if ($teachers = get_course_teachers($courseid)) {
-        foreach ($teachers as $key => $teacher) {
-            if ($teacher->editall) {             // These can access anything
-                continue;
-            }
-            if (($teacher->authority > 0) and ismember($groupid, $teacher->id)) 
-            {  // Specific group teachers
-                continue;
-            }
-            unset($teachers[$key]);
-        }
-    }
-    return $teachers;
-}
-
 
 /**
  * Add a user to a group, return true upon success or if user already a group 
@@ -187,18 +139,17 @@ function add_user_to_group($groupid, $userid) {
 
 
 /**
- * Get the group ID of the current user in the given course
+ * Get the IDs for the user's groups in the given course.
  *
  * @uses $USER
- * @param int $courseid The course being examined - relates to id field in 
- * 'course' table.
- * @return array An array of the groupids that the user belongs to. 
+ * @param int $courseid The course being examined - the 'course' table id field.
+ * @return array An _array_ of groupids.
+ * (Was return $groupids[0] - consequences!)
  */
 function mygroupid($courseid) {
     global $USER;
-       // TODO: check whether needs to be groups or groupids. 
        $groupids = groups_get_groups_for_user($USER->id, $courseid);
-       return $groupids[0];
+       return $groupids;
 }
 
 /**
@@ -207,12 +158,17 @@ function mygroupid($courseid) {
  */
 function groupmode($course, $cm=null) {
 
-    if ($cm and !$course->groupingid) {
+    if ($cm and !$course->groupmodeforce) {
+        return $cm->groupmode;
+    }
+    return $course->groupmode;
+    
+    /*if ($cm and !$course->groupingid) {
         //TODO: was $coursemodule
         return groups_has_groups_setup_for_instance($cm);
     } else {
        return groups_has_groups_setup($course->id);
-    }
+    }*/
 }
 
 
@@ -245,15 +201,20 @@ function set_current_group($courseid, $groupid) {
  */
 function get_current_group($courseid, $full = false) {
     global $SESSION;
-    
+
+    $mygroupid = mygroupid($courseid);
+    if (is_array($mygroupid)) {
+        $mygroupid = array_shift($mygroupid);
+    }
+
     if (isset($SESSION->currentgroup[$courseid])) {
        $currentgroup = $SESSION->currentgroup[$courseid];
     } else {
-       $currentgroup = mygroupid($courseid);
+       $currentgroup = $mygroupid;
     }
     
     if ($currentgroup) {
-       $SESSION->currentgroup[$courseid] = mygroupid($courseid);
+       $SESSION->currentgroup[$courseid] = $mygroupid;
     }
 
     if ($full) {
@@ -294,19 +255,19 @@ function get_and_set_current_group($course, $groupmode, $groupid=-1) {
 
     $context = get_context_instance(CONTEXT_COURSE, $course->id);
     if ($groupid) {      // Try to change the current group to this groupid
-        if ($group = get_record('groups', 'id', $groupid, 'courseid', $course->id)) { // Exists
+        if (groups_group_belongs_to_course($groupid, $course->id)) { // Exists  TODO:check.
             if (has_capability('moodle/site:accessallgroups', $context)) {  // Sets current default group
-                $currentgroupid = set_current_group($course->id, $group->id);
+                $currentgroupid = set_current_group($course->id, $groupid);
 
             } elseif ($groupmode == VISIBLEGROUPS) {
                   // All groups are visible
                 //if (ismember($group->id)){
-                    $currentgroupid = set_current_group($course->id, $group->id); //set this since he might post
+                    $currentgroupid = set_current_group($course->id, $groupid); //set this since he might post
                 /*)}else {
                     $currentgroupid = $group->id;*/
             } elseif ($groupmode == SEPARATEGROUPS) { // student in separate groups switching
                 if (ismember($group->id)) { //check if is a member
-                    $currentgroupid = set_current_group($course->id, $group->id); //might need to set_current_group?
+                    $currentgroupid = set_current_group($course->id, $groupid); //might need to set_current_group?
                 }
                 else {
                     echo($group->id);
@@ -362,7 +323,7 @@ function setup_and_print_groups($course, $groupmode, $urlroot) {
         groups_instance_print_grouping_selector();
     }//added code here to allow non-editting teacher to swap in-between his own groups
     //added code for students in separategrous to swtich groups
-    else if ($groupmode == SEPARATEGROUPS and (isteacher($course->id) or isstudent($course->id))) {
+    else if ($groupmode == SEPARATEGROUPS and has_capability('moodle/course:view', $context)) {
         groups_instance_print_group_selector();
     }
 
@@ -370,6 +331,14 @@ function setup_and_print_groups($course, $groupmode, $urlroot) {
 }
 
 
+function groups_instance_print_grouping_selector() {
+    //TODO: ??
+}
+function groups_instance_print_group_selector() {
+    //TODO: ??
+}
+
+
 function oldgroups_print_user_group_info($currentgroup, $isseparategroups, $courseid) {
        global $CFG;
        $context = get_context_instance(CONTEXT_COURSE, $courseid);
@@ -394,4 +363,50 @@ function oldgroups_print_user_group_info($currentgroup, $isseparategroups, $cour
     }
 }
 
+/**
+ * Get the group object, including the course ID by default.
+ * @param groupid ID of the group.
+ * @param getcourse (default true), include the course ID in the return.
+ * @return group object, optionally including 'courseid'.
+ */
+function groups_get_group($groupid, $getcourse=true) {
+    $group = groups_db_get_group_settings($groupid);
+    if ($group && $getcourse) {
+        $group->courseid = groups_get_course($groupid);
+    }
+    return $group;
+}
+
+
+/**
+ * Get an array of groups, as id => name.
+ * Replaces, get_records_menu("groups", "courseid", $course->id, "name ASC", "id,name")
+ * (For /user/index.php)
+ */
+function groups_get_groups_names($courseid) {
+    $groupids = groups_db_get_groups($courseid);
+    if (! $groupids) {
+        return false;
+    }
+    $groups_names = array();
+    foreach ($groupids as $id) {
+        $groups_names[$id] = groups_get_group_name($id);
+    }
+//TODO: sort. SQL?
+    return $groups_names;
+}
+
+/**
+ * Get the groups that a number of users are in.
+ * (For block_quiz_results.php)
+ */
+function groups_get_groups_users($userids, $courseid) {
+    global $CFG;
+    $groups_users = get_records_sql(
+        'SELECT gm.userid, gm.groupid, g.name FROM '.$CFG->prefix.'groups g LEFT JOIN '.$CFG->prefix.'groups_members gm ON g.id = gm.groupid '.
+        'WHERE g.courseid = '.$courseid.' AND gm.userid IN ('.implode(',', $userids).')'
+        );
+    return $groups_users;
+}
+
 ?>
\ No newline at end of file
index dffb55c..a2008ba 100644 (file)
@@ -106,6 +106,9 @@ function groups_get_group_displayname($groupid) {
  * @return string The display name of the grouping
  */
 function groups_get_grouping_displayname($groupingid) {
+    if (GROUP_NOT_IN_GROUPING == $groupingid) {
+        return get_string('notingrouping', 'group');
+    }    
        $groupingsettings = groups_get_grouping_settings($groupingid);
     if ($groupingsettings) {   
         $groupingname = $groupingsettings->name;
@@ -152,8 +155,19 @@ function groups_groups_to_groupids($groups) {
 function groups_groupid_to_group($groupid) {
 }
 
-// @@@ TO DO 
-function groups_groupids_to_groups($groupids) {
+/**
+ * Given an array of group IDs get an array of group objects.
+ * TODO: quick and dirty. Replace with SQL?
+ */
+function groups_groupids_to_groups($groupids, $courseid=false) {
+    if (! $groupids) {
+        return false;
+    }
+    $groups = array();
+    foreach ($groupids as $id) {
+        $groups[] = groups_get_group_settings($id, $courseid);
+    }
+    return $groups;
 }
 
 
@@ -196,4 +210,68 @@ function groups_get_course($groupid) {
     return false;
 }
 
+/**
+ * Return the address for the group settings page.
+ * (For /user/index.php etc.)
+ * @param $courseid
+ * @param $groupid
+ * @param $groupingid Optional grouping ID
+ * @param $html True for HTML pages, eg. on error. False for HTTP redirects.
+ * @param $param Extra parameters.
+ */
+function groups_group_edit_url($courseid, $groupid, $groupingid=false, $html=true, $param=false) {
+    global $CFG;
+    $html ? $sep = '&amp;' : $sep = '&';
+    $url = $CFG->wwwroot.'/group/group.php?courseid='.$courseid;
+    if ($groupid) {
+        $url .= $sep.'group='.$groupid;
+    }
+    if ($groupingid) {
+        $url .= $sep.'grouping='.$groupingid;
+    }
+    if ($param) {
+        $url .= $sep.$param;
+    }
+    return $url;
+}
+
+/** Internal use only. */
+function groups_grouping_edit_url($courseid, $groupingid=false, $html=true) {
+    global $CFG;
+    $html ? $sep = '&amp;' : $sep = '&';
+    $url = $CFG->wwwroot.'/group/grouping.php?courseid='.$courseid;
+    if ($groupingid) {
+        $url .= $sep.'grouping='.$groupingid;
+    }
+    return $url;
+}
+
+/** Internal use only. */
+function groups_members_add_url($courseid, $groupid, $groupingid=false, $html=true) {
+    global $CFG;
+    $html ? $sep = '&amp;' : $sep = '&';
+    $url = $CFG->wwwroot.'/group/assign.php?courseid='.$courseid.$sep.'group='.$groupid;
+    if ($groupingid) {
+        $url .= $sep.'grouping='.$groupingid;
+    }
+    return $url;
+}
+
+/**
+ * Return the address for the main group management page.
+ * (For admin block.)
+ */
+function groups_home_url($courseid, $groupid=false, $groupingid=false, $html=true) {
+    global $CFG;
+    $html ? $sep = '&amp;' : $sep = '&';
+    $url = $CFG->wwwroot.'/group/index.php?id='.$courseid;
+    if ($groupid) {
+        $url .= $sep.'group='.$groupid;
+    }
+    if ($groupingid) {
+        $url .= $sep.'grouping='.$groupingid;
+    }
+    return $url;
+}
+
 ?>
\ No newline at end of file
index 08e5650..d753206 100644 (file)
@@ -5,7 +5,7 @@
  * /admin/report/simpletest/index.php?showpasses=1&showsearch=1&path=course%2Fgroups
  *
  * @copyright &copy; 2006 The Open University
- * @author N.D.Freear@open.ac.uk
+ * @author N.D.Freear AT open.ac.uk
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package groups
  *
@@ -25,6 +25,12 @@ class basicgrouplib_test extends UnitTestCase {
     var $userid_2= 0;
     var $groupid = 0;
 
+    function __construct() {
+       parent::UnitTestCase();
+
+       groups_create_role();   
+    }
+
     function test_get_user() {
         $this->assertTrue($user = groups_get_user(2)); //Primary admin.
         if (isset($user)) {
@@ -53,6 +59,7 @@ class basicgrouplib_test extends UnitTestCase {
         $groupinfo->name = 'Group '. $this->getLabel();  //'Temporary Group Name'
         $this->assertTrue(groups_set_group_settings($this->groupid, $groupinfo));
         $this->assertTrue($groupinfo->name == groups_get_group_name($this->groupid));
+        $this->assertTrue($this->courseid == groups_get_course($this->groupid));
     }
 
     function test_add_member() {
index 56ce99f..04881e6 100644 (file)
@@ -3,7 +3,7 @@
  * Unit tests for new Moodle Groups - groupinglib.php
  *
  * @copyright &copy; 2006 The Open University
- * @author N.D.Freear@open.ac.uk
+ * @author N.D.Freear AT open.ac.uk
  * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
  * @package groups
  */
diff --git a/group/version.php b/group/version.php
new file mode 100644 (file)
index 0000000..6efb625
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+
+////////////////////////////////////////////////////////////////////////////////
+//  Code fragment to define the group version etc.
+//  This fragment is called by /admin/index.php
+////////////////////////////////////////////////////////////////////////////////
+
+$group_version  = 2006120401;
+//$module->requires = 2006120400;  // Requires this Moodle version
+
+?>
index 32ae889..e8df7c9 100644 (file)
@@ -1,4 +1,18 @@
 <?php
+/**
+ * Language strings for new Moodle Groups (cvs:/group/) 
+ *
+ * @copyright &copy; 2006 The Open University
+ * @author J.White AT open.ac.uk
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
+ * @package groups
+ */
+
+$string['groupmember'] = 'Group Member';
+$string['groupmemberdesc'] = 'Standard role for a member of a group.';
+$string['notingrouping'] = '[Not in a grouping]';
+
+$string['errornotingrouping'] = 'Sorry, you can\'t create a group in $a';
 
 $string['groupings'] = 'Groupings';
 $string['grouping'] = 'Grouping';
@@ -22,7 +36,7 @@ $string['addexistinggroupstogrouping'] = 'Add existing groups to grouping';
 $string['addgroupstogrouping'] = 'Add groups to grouping';
 
 $string['removeselectedusers'] = 'Remove selected users';
-$string['adduserstogroup'] = 'Add users to group';
+$string['adduserstogroup'] = 'Add/remove users from group'; //'Add users to group';
 
 $string['groupingname'] = 'Grouping name';
 $string['defaultgroupingname'] = 'Grouping';
@@ -52,9 +66,9 @@ $string['displaygrouping'] = 'Display grouping';
 $string['addgroupstogrouping'] = 'Add groups to grouping';
 $string['showusersalreadyingroup'] = 'Show users already in a group in the grouping';
 
-$string ['save'] = 'Save';
+$string['save'] = 'Save';
 $string['cancel'] = 'Cancel';
-
+$string['return'] = 'Return';
 
 $string['groupfor'] = "for group";
 $string['groupinfo'] = 'Info about selected group';
diff --git a/lang/en_utf8/help/lesson/deleteattempts.html b/lang/en_utf8/help/lesson/deleteattempts.html
new file mode 100644 (file)
index 0000000..821e4a3
--- /dev/null
@@ -0,0 +1,3 @@
+<p align="center"><b>Delete student attempts for this lesson (user id)</b></p>
+
+<p>Type a username in here and click "Save Changes" to delete all attempts and grades for that user.</p>
\ No newline at end of file
index 33d5f8f..32f1368 100755 (executable)
@@ -37,6 +37,7 @@ define('RISK_XSS',         0x0004);
 define('RISK_PERSONAL',    0x0008);
 define('RISK_SPAM',        0x0010);
 
+require_once($CFG->dirroot.'/group/lib.php');
 
 $context_cache    = array();    // Cache of all used context objects for performance (by level and instance)
 $context_cache_id = array();    // Index to above cache by id
@@ -442,8 +443,8 @@ function has_capability($capability, $context=NULL, $userid=NULL, $doanything=tr
 
             case CONTEXT_GROUP:
                 // Find course.
-                $group = get_record('groups','id',$context->instanceid);
-                $courseinstance = get_context_instance(CONTEXT_COURSE, $group->courseid);
+                $courseid = groups_get_course($context->instanceid);
+                $courseinstance = get_context_instance(CONTEXT_COURSE, $courseid);
 
                 $parentcats = get_parent_cats($courseinstance, CONTEXT_COURSE);
                 foreach ($parentcats as $parentcat) {
@@ -601,8 +602,8 @@ function capability_search($capability, $context, $capabilities, $switchroleacti
         break;
 
         case CONTEXT_GROUP: // 1 to 1 to course
-            $group = get_record('groups','id',$context->instanceid);
-            $parentcontext = get_context_instance(CONTEXT_COURSE, $group->courseid);
+            $courseid = groups_get_course($context->instanceid);
+            $parentcontext = get_context_instance(CONTEXT_COURSE, $courseid);
             $permission = capability_search($capability, $parentcontext, $capabilities);
         break;
 
@@ -1150,10 +1151,10 @@ function capability_prohibits($capability, $context, $sum='', $array='') {
 
         case CONTEXT_GROUP:
             // 1 to 1 to course.
-            if (!$group = get_record('groups','id',$context->instanceid)) {
+            if (!$courseid = groups_get_course($context->instanceid)) {
                 return false;
             }
-            $parent = get_context_instance(CONTEXT_COURSE, $group->courseid);
+            $parent = get_context_instance(CONTEXT_COURSE, $courseid);
             return capability_prohibits($capability, $parent);
         break;
 
@@ -1528,7 +1529,8 @@ function validate_context($contextlevel, $instanceid) {
             return (boolean)count_records('course', 'id', $instanceid);
 
         case CONTEXT_GROUP:
-            return (boolean)count_records('groups', 'id', $instanceid);
+            //return (boolean)count_records('groups_groups', 'id', $instanceid); //TODO:DONOTCOMMIT:
+            return groups_group_exists($instanceid);
 
         case CONTEXT_MODULE:
             return (boolean)count_records('course_modules', 'id', $instanceid);
@@ -1858,7 +1860,7 @@ function role_assign($roleid, $userid, $groupid, $contextid, $timestart=0, $time
         return false;
     }
 
-    if ($groupid && !record_exists('groups', 'id', $groupid)) {
+    if ($groupid && !groups_group_exists($groupid)) {
         debugging('Group ID '.intval($groupid).' does not exist!');
         return false;
     }
@@ -2337,8 +2339,8 @@ function print_context_name($context) {
             break;
 
         case CONTEXT_GROUP: // 1 to 1 to course
-            if ($group = get_record('groups', 'id', $context->instanceid)) {
-                $name = get_string('group').': '.$group->name;
+            if ($name = groups_get_group_name($context->instanceid)) {
+                $name = get_string('group').': '. $name;
             }
             break;
 
@@ -2598,7 +2600,7 @@ function get_parent_contexts($context) {
         break;
 
         case CONTEXT_GROUP: // 1 to 1 to course
-            if (!$group = get_record('groups','id',$context->instanceid)) {
+            if (! $group = groups_get_group($context->instanceid)) {
                 return array();
             }
             if ($parent = get_context_instance(CONTEXT_COURSE, $group->courseid)) {
@@ -3374,4 +3376,4 @@ function user_has_role_assignment($userid, $roleid, $contextid=0) {
         return record_exists('role_assignments', 'userid', $userid, 'roleid', $roleid);
     }
 }
-?>
+?>
\ No newline at end of file
diff --git a/lib/adodb/adodb-connection.inc.php b/lib/adodb/adodb-connection.inc.php
deleted file mode 100644 (file)
index 8d6d540..0000000
+++ /dev/null
@@ -1,1787 +0,0 @@
-<?php
-/** 
- * @version V3.40 7 April 2003 (c) 2000-2003 John Lim (jlim@natsoft.com.my). All rights reserved.
- * Released under both BSD license and Lesser GPL library license. 
- * Whenever there is any discrepancy between the two licenses, 
- * the BSD license will take precedence. 
- *
- * Set tabs to 4 for best viewing.
- * 
- * Latest version is available at http://php.weblogs.com
- *
- */
-
-    
-    function ADODB_TransMonitor($dbms, $fn, $errno, $errmsg, $p1, $p2, &$thisConnection)
-    {
-        /* print "Errorno ($fn errno=$errno m=$errmsg) "; */
-        
-        $thisConnection->_transOK = false;
-        if ($thisConnection->_oldRaiseFn) {
-            $fn = $thisConnection->_oldRaiseFn;
-            $fn($dbms, $fn, $errno, $errmsg, $p1, $p2,$thisConnection);
-        }
-    }
-    
-    
-    /**
-     * Connection object. For connecting to databases, and executing queries.
-     */ 
-    class ADOConnection {
-    /*  */
-    /*  PUBLIC VARS  */
-    /*  */
-    var $dataProvider = 'native';
-    var $databaseType = '';     /* / RDBMS currently in use, eg. odbc, mysql, mssql                 */
-    var $database = '';         /* / Name of database to be used.   */
-    var $host = '';         /* / The hostname of the database server    */
-    var $user = '';         /* / The username which is used to connect to the database server.  */
-    var $password = '';     /* / Password for the username. For security, we no longer store it. */
-    var $debug = false;     /* / if set to true will output sql statements */
-    var $maxblobsize = 256000;  /* / maximum size of blobs or large text fields -- some databases die otherwise like foxpro */
-    var $concat_operator = '+'; /* / default concat operator -- change to || for Oracle/Interbase       */
-    var $fmtDate = "'Y-m-d'";   /* / used by DBDate() as the default date format used by the database */
-    var $fmtTimeStamp = "'Y-m-d, h:i:s A'"; /* / used by DBTimeStamp as the default timestamp fmt. */
-    var $true = '1';            /* / string that represents TRUE for a database */
-    var $false = '0';           /* / string that represents FALSE for a database */
-    var $replaceQuote = "\\'";  /* / string to use to replace quotes */
-    var $charSet=false;     /* / character set to use - only for interbase */
-    var $metaTablesSQL = '';
-    /* -- */
-    var $hasInsertID = false;       /* / supports autoincrement ID? */
-    var $hasAffectedRows = false;   /* / supports affected rows for update/delete? */
-    var $hasTop = false;            /* / support mssql/access SELECT TOP 10 * FROM TABLE */
-    var $hasLimit = false;          /* / support pgsql/mysql SELECT * FROM TABLE LIMIT 10 */
-    var $readOnly = false;          /* / this is a readonly database - used by phpLens */
-    var $hasMoveFirst = false;  /* / has ability to run MoveFirst(), scrolling backwards */
-    var $hasGenID = false;      /* / can generate sequences using GenID(); */
-    var $hasTransactions = true; /* / has transactions */
-    /* -- */
-    var $genID = 0;         /* / sequence id used by GenID(); */
-    var $raiseErrorFn = false;  /* / error function to call */
-    var $upperCase = false; /* / uppercase function to call for searching/where */
-    var $isoDates = false; /* / accepts dates in ISO format */
-    var $cacheSecs = 3600; /* / cache for 1 hour */
-    var $sysDate = false; /* / name of function that returns the current date */
-    var $sysTimeStamp = false; /* / name of function that returns the current timestamp */
-    var $arrayClass = 'ADORecordSet_array'; /* / name of class used to generate array recordsets, which are pre-downloaded recordsets */
-    
-    var $noNullStrings = false; /* / oracle specific stuff - if true ensures that '' is converted to ' ' */
-    var $numCacheHits = 0; 
-    var $numCacheMisses = 0;
-    var $pageExecuteCountRows = true;
-    var $uniqueSort = false; /* / indicates that all fields in order by must be unique */
-    var $leftOuter = false; /* / operator to use for left outer join in WHERE clause */
-    var $rightOuter = false; /* / operator to use for right outer join in WHERE clause */
-    var $ansiOuter = false; /* / whether ansi outer&nbs