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.
This commit is contained in:
moodler
2004-01-28 14:14:19 +00:00
parent ad7101a17b
commit 70812e39a0
7 changed files with 139 additions and 5 deletions
+7 -4
View File
@@ -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;
}
+13
View File
@@ -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;
}
+19
View File
@@ -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`
#
+11
View File
@@ -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;
}
+9
View File
@@ -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',
+79
View File
@@ -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) {
+1 -1
View File
@@ -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