storing arbitrary preferences for each user.
Thanks to Jon Papaioannou for the first draft of this code
which I modified.
}
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)) {
}
}
+ if ($preferences = get_records('user_preferences', 'userid', $user->id)) {
+ foreach ($preferences as $preference) {
+ $user->preference[$preference->name] = $preference->value;
+ }
+ }
+
return $user;
}
) 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;
}
) 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`
#
}
+ 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;
}
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',
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
}
+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) {
// 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