<?php /**************************************************************************** * PREFERENCES MANAGEMENT FUNCTIONS ****************************************************************************/ class prefs { private static $prefs = null; /** This function transforms user_preferences database records into values * stored inside $prefs. */ private static function fromBase($qr, $toTrack = false) { while ($r = dbFetchHash($qr)) { $v = $r['version']; $i = $r['id']; if (!is_array(prefs::$prefs[$v])) { prefs::$prefs[$v] = array(); } prefs::$prefs[$v][$i] = $r['value']; if ($toTrack && $v == "main") { if (!is_array(tracking::$data['pref_override'])) { tracking::$data['pref_override'] = array(); } tracking::$data['pref_override'][$i] = $r['value']; } } } /** This function initializes $prefs to an empty array * then reads default preferences from the user_preferences table. */ private static function getDefaults() { prefs::$prefs = array(); $qr = dbQuery("SELECT id,version,value FROM user_preferences WHERE account=0"); if (!$qr || !pg_num_rows($qr)) { return; } prefs::fromBase($qr); } /** This function reads the current user's preferences from the base. */ private static function loadUser() { $qr = dbQuery("SELECT id,version,value FROM user_preferences WHERE account={$_SESSION['userid']}"); if (!$qr || !pg_num_rows($qr)) { return; } prefs::fromBase($qr, true); } /** This function loads preferences by loading default values and then, if * an user is authenticated, his own preferences. */ private static function load() { prefs::getDefaults(); if ($_SESSION['authok']) { prefs::loadUser(); } elseif (is_array(tracking::$data['pref_override'])) { foreach (tracking::$data['pref_override'] as $pref => $value) { prefs::$prefs['main'][$pref] = $value; } } } /** This function sets user preferences. */ static function set($path, $val) { if (!$_SESSION['authok']) { return false; } if (!is_array(prefs::$prefs)) { prefs::load(); } list($ver, $pref) = explode('/', $path); $q = dbQuery("DELETE FROM user_preferences WHERE account={$_SESSION['userid']} AND id='$pref' AND version='$ver'"); $q = dbQuery("INSERT INTO user_preferences VALUES('$pref','$ver',{$_SESSION['userid']},'".addslashes($val)."')"); if ($q) { prefs::$prefs[$ver][$pref] = $val; return true; } return false; } /** This function returns a value from the preferences using a version/pref_name path. */ static function get($path, $default = null) { if (!is_array(prefs::$prefs)) { prefs::load(); } list($version, $name) = explode('/', $path); if (is_array(prefs::$prefs[$version])) { $v = prefs::$prefs[$version][$name]; } else { $v = null; } if (is_null($v) && !is_null($default)) { $v = $default; } return $v; } } ?>