]> git.mjollnir.org Git - moodle.git/commitdiff
Added new table called "user preferences" which can be used for
authormoodler <moodler>
Wed, 28 Jan 2004 14:14:19 +0000 (14:14 +0000)
committermoodler <moodler>
Wed, 28 Jan 2004 14:14:19 +0000 (14:14 +0000)
storing arbitrary preferences for each user.

Thanks to Jon Papaioannou for the first draft of this code
which I modified.

lib/datalib.php
lib/db/mysql.php
lib/db/mysql.sql
lib/db/postgres7.php
lib/db/postgres7.sql
lib/moodlelib.php
version.php

index 7c18a777ff276982d1d0e3fb85f889a4a8026aa7..af126b19a708faa15a428cccdebae4bd20509cb5 100644 (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;
 }
 
index e3a0e442d9d2c175ce08d6aab306cd60328720ae..c125bd375ae954d05ee2f082cd06a7340383c9d5 100644 (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;
 
 }
index 0352414ab94d1256611805305a0d7b9a7e8aaed1..0682cafa4b06c91d22d6234cabceef8bd01d8faa 100644 (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`
 #
index dd0b7d80767f10a8670bb658c0b766efd96d3746..3885f1611477df7acc0ef082c60fba88a40ebf6c 100644 (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;
 }
 
index 53afbea6e036287edee4fb93c076a2d06f9c3d2f..efe274a7ef6a9215d7a613351e8a62e48c4f8c3c 100644 (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',
index d424d0ba74e167111a99f94e077209bfd0cc1d40..394c20c4c7f4b30679d1b3aa7b7cef632ed86850 100644 (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) {
index b0b6aa0901d5941963a68ba72b83d6339afa52c6..7fd5b3270b6c00f0baa7b4628a094f2df9467451 100644 (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