From: moodler Date: Wed, 28 Jan 2004 14:14:19 +0000 (+0000) Subject: Added new table called "user preferences" which can be used for X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=70812e39a0530911864b5e6b74751dca3eb4eb55;p=moodle.git Added new table called "user preferences" which can be used for storing arbitrary preferences for each user. Thanks to Jon Papaioannou for the first draft of this code which I modified. --- diff --git a/lib/datalib.php b/lib/datalib.php index 7c18a777ff..af126b19a7 100644 --- a/lib/datalib.php +++ b/lib/datalib.php @@ -933,10 +933,7 @@ function get_user_info_from_db($field, $value) { } if ($admins = get_records("user_admins", "userid", $user->id)) { - foreach ($admins as $admin) { - $user->admin = true; - break; - } + $user->admin = true; } if ($displays = get_records("course_display", "userid", $user->id)) { @@ -952,6 +949,12 @@ function get_user_info_from_db($field, $value) { } } + if ($preferences = get_records('user_preferences', 'userid', $user->id)) { + foreach ($preferences as $preference) { + $user->preference[$preference->name] = $preference->value; + } + } + return $user; } diff --git a/lib/db/mysql.php b/lib/db/mysql.php index e3a0e442d9..c125bd375a 100644 --- a/lib/db/mysql.php +++ b/lib/db/mysql.php @@ -618,6 +618,19 @@ function main_upgrade($oldversion=0) { ) TYPE=MyISAM COMMENT='For everything with a time associated to it'; "); } + if ($oldversion < 2004012800) { + modify_database("", "CREATE TABLE `prefix_user_preferences` ( + `id` int(10) unsigned NOT NULL auto_increment, + `userid` int(10) unsigned NOT NULL default '0', + `name` varchar(50) NOT NULL default '', + `value` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `useridname` (userid,name) + ) TYPE=MyISAM COMMENT='Allows modules to store arbitrary user preferences'; "); + } + + return $result; } diff --git a/lib/db/mysql.sql b/lib/db/mysql.sql index 0352414ab9..0682cafa4b 100644 --- a/lib/db/mysql.sql +++ b/lib/db/mysql.sql @@ -314,6 +314,25 @@ CREATE TABLE `prefix_user_admins` ( ) TYPE=MyISAM COMMENT='One record per administrator user'; # -------------------------------------------------------- + + +# +# Table structure for table `user_preferences` +# + +CREATE TABLE `prefix_user_preferences` ( + `id` int(10) unsigned NOT NULL auto_increment, + `userid` int(10) unsigned NOT NULL default '0', + `name` varchar(50) NOT NULL default '', + `value` varchar(255) NOT NULL default '', + PRIMARY KEY (`id`), + UNIQUE KEY `id` (`id`), + KEY `useridname` (userid,name) +) TYPE=MyISAM COMMENT='Allows modules to store arbitrary user preferences'; +# -------------------------------------------------------- + + + # # Table structure for table `user_students` # diff --git a/lib/db/postgres7.php b/lib/db/postgres7.php index dd0b7d8076..3885f16114 100644 --- a/lib/db/postgres7.php +++ b/lib/db/postgres7.php @@ -365,6 +365,17 @@ function main_upgrade($oldversion=0) { } + if ($oldversion < 2004012800) { + modify_database("", "CREATE TABLE prefix_user_preferences ( + id SERIAL PRIMARY KEY, + userid integer NOT NULL default '0', + name varchar(50) NOT NULL default '', + value varchar(255) NOT NULL default '' + ); "); + + modify_database("", "CREATE INDEX prefix_user_preferences_useridname_idx ON prefix_user_preferences (userid,name);"); + } + return $result; } diff --git a/lib/db/postgres7.sql b/lib/db/postgres7.sql index 53afbea6e0..efe274a7ef 100644 --- a/lib/db/postgres7.sql +++ b/lib/db/postgres7.sql @@ -205,6 +205,15 @@ CREATE TABLE prefix_user_admins ( userid integer NOT NULL default '0' ); +CREATE TABLE prefix_user_preferences ( + id SERIAL PRIMARY KEY, + userid integer NOT NULL default '0', + name varchar(50) NOT NULL default '', + value varchar(255) NOT NULL default '' +); + +CREATE INDEX prefix_user_preferences_useridname_idx ON prefix_user_preferences (userid,name); + CREATE TABLE prefix_user_students ( id SERIAL PRIMARY KEY, userid integer NOT NULL default '0', diff --git a/lib/moodlelib.php b/lib/moodlelib.php index d424d0ba74..394c20c4c7 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -60,6 +60,7 @@ function optional_variable(&$var, $default=0) { function set_config($name, $value) { /// No need for get_config because they are usually always available in $CFG + global $CFG; $CFG->$name = $value; // So it's defined for this invocation at least @@ -74,6 +75,84 @@ function set_config($name, $value) { } +function reload_user_preferences() { +/// Refresh current USER with all their current preferences + + global $USER; + + unset($USER->preference); + + if ($preferences = get_records('user_preferences', 'userid', $USER->id)) { + foreach ($preferences as $preference) { + $USER->preference[$preference->name] = $preference->value; + } + } +} + +function set_user_preference($name, $value) { +/// Sets a preference for the current user + + global $USER; + + if (empty($name)) { + return false; + } + + if ($preference = get_record('user_preferences', 'userid', $USER->id, 'name', $name)) { + return set_field("user_preferences", "value", $value, "id", $preference->id); + + } else { + $preference->userid = $USER->id; + $preference->name = $name; + $preference->value = (string)$value; + if (insert_record('user_preferences', $record)) { + $USER->preference[$name] = $value; + return true; + } else { + return false; + } + } +} + +function set_user_preferences($prefarray) { +/// Sets a whole array of preferences for the current user + + if (!is_array($prefarray) or empty($prefarray)) { + return false; + } + + $return = true; + foreach ($prefarray as $name => $value) { + // The order is important; if the test for return is done first, + // then if one function call fails all the remaining ones will + // be "optimized away" + $return = set_user_preference($name, $value) and $return; + } + return $return; +} + +function get_user_preferences($name=NULL, $default=NULL) { +/// Without arguments, returns all the current user preferences +/// as an array. If a name is specified, then this function +/// attempts to return that particular preference value. If +/// none is found, then the optional value $default is returned, +/// otherwise NULL. + + global $USER; + + if (empty($USER->preference)) { + return $default; // Default value (or NULL) + } + if (empty($name)) { + return $USER->preference; // Whole array + } + if (!isset($USER->preference[$name])) { + return $default; // Default value (or NULL) + } + return $USER->preference[$name]; // The single value +} + + /// FUNCTIONS FOR HANDLING TIME //////////////////////////////////////////// function make_timestamp($year, $month=1, $day=1, $hour=0, $minute=0, $second=0, $timezone=99) { diff --git a/version.php b/version.php index b0b6aa0901..7fd5b3270b 100644 --- a/version.php +++ b/version.php @@ -5,7 +5,7 @@ // database to determine whether upgrades should // be performed (see lib/db/*.php) -$version = 2004012700; // The current version is a date (YYYYMMDDXX) +$version = 2004012800; // The current version is a date (YYYYMMDDXX) $release = "1.2 development"; // User-friendly version number