db = $db; $this->config = $config; $this->user_id = $user_id; $this->altered = array(); $this->deleted = array(); $this->added = array(); $this->is_changed = FALSE; $this->is_loaded = FALSE; $this->entries = array(); } function save() { if ($this->user_id == NULL) throw new Exception('$this->user_id is NULL'); $user_id = intval($this->user_id); if ($this->is_changed == FALSE) return; // Just an update foreach($this->altered as $key => $value) { $s_key = pg_escape_string($key); $s_value = pg_escape_string($value->value); $query = " UPDATE user_preferences SET value = '{$s_value}', date_modified = NOW() WHERE user_id = '{$user_id}' AND preferences_id = (SELECT id FROM preferences WHERE name_short = '{$s_key}') "; pg_query($query); } // Check for existence, then add foreach($this->added as $key => $value) { $s_key = pg_escape_string($key); $s_name = pg_escape_string(ucwords(str_replace('_', ' ', $key))); $s_value = pg_escape_string($value->value); $query = " SELECT id FROM preferences WHERE name_short = '{$s_key}' "; $result = pg_query($query); if (pg_num_rows($result) == 0) { $query = "INSERT INTO preferences (date_created, date_modified, name_short, name, is_active) VALUES (NOW(), NOW(), '{$s_key}', '{$s_name}', 't')"; pg_query($query); } $query = " INSERT INTO user_preferences ( date_created, date_modified, user_id, preferences_id, value, is_active ) VALUES ( NOW(), NOW(), '{$user_id}', (SELECT id FROM preferences WHERE name_short = '{$s_key}'), '{$s_value}', 't' ) "; pg_query($query); } // Delete entries foreach($this->deleted as $key => $value) { $s_key = pg_escape_string($key); $query = " DELETE FROM user_preferences WHERE user_id = '{$user_id}' AND preferences_id = (SELECT id FROM preferences WHERE name_short = '{$s_key}') "; pg_query($query); } $this->fromDB($user_id); } function fromDB($user_id = NULL) { if ($user_id == NULL && $this->user_id == NULL) throw new Exception('$this->user_id and passed $user_id are NULL'); $user_id = (($user_id == NULL) ? intval($this->user_id) : intval($user_id)); $this->user_id = $user_id; $this->deleted = array(); $this->is_changed = FALSE; $this->altered = array(); $this->added = array(); $this->is_loaded = TRUE; $this->entries = array(); $query = " SELECT uprefs.date_created, uprefs.date_modified, uprefs.id, uprefs.user_id, uprefs.preferences_id, uprefs.value, uprefs.is_active, prefs.name, prefs.name_short FROM user_preferences uprefs JOIN preferences prefs ON (prefs.id = uprefs.preferences_id) WHERE uprefs.user_id = '{$user_id}' "; $res = pg_query($query); if (pg_num_rows($res) == 0) return FALSE; while ($row = pg_fetch_object($res)) { $this->entries[$row->name_short] = $row; } } function __get($name) { // If it's deleted, ignore everything else if (isset($this->deleted[$name])) { return NULL; } // Then Added if (isset($this->added[$name])) { return $this->added[$name]->value; } if (isset($this->altered[$name])) { return $this->altered[$name]->value; } // Then entries if (isset($this->entries[$name])) { return $this->entries[$name]->value; } return NULL; } function __unset($name) { if (isset($this->entries[$name])) { $this->deleted[$name] = $this->entries[$name]; $this->is_changed = TRUE; } if (isset($this->added[$name])) unset($this->added[$name]); if (isset($this->altered[$name])) unset($this->altered[$name]); } function __set($name, $value) { if (isset($this->entries[$name])) { $m_array = &$this->altered; $this->is_changed = TRUE; } else { $m_array = &$this->added; $this->is_changed = TRUE; } if (!isset($m_array[$name])) $m_array[$name] = new stdclass(); if (isset($this->deleted[$name])) unset($this->deleted[$name]); $m_array[$name]->name_short = $name; $m_array[$name]->value = $value; } } // Test code require_once('Poutinaba_User.php'); require_once('Poutinaba_Thumb.php'); require_once('Poutinaba_Post.php'); require_once('Poutinaba_Thread.php'); require_once('Poutinaba_Media.php'); require_once('Poutinaba_Page.php'); require_once('Poutinaba_Channel_Page.php'); require_once('Poutinaba_Preferences.php'); require_once('../dbconn.php'); require_once('../config.php'); $prefs = new Poutinaba_Preferences($config, $db); $prefs->fromDB(1); $prefs->items_per_page = 25; //unset($prefs->items_per_page); $prefs->save(); echo "
"; print_r($prefs); die(); die($prefs->items_per_page); ?>