function beforeSave($updated_fields) { parent::beforeSave($updated_fields); if (isset($updated_fields['username'])) { $app = Pie_Config::expect('pie', 'app'); $unique = Pie_Config::get('users', 'model', $app, 'username_unique', true); if ($unique) { $criteria = array('username' => $updated_fields['username']); if (isset($this->id)) { $criteria['id != '] = $this->id; } $row = Users_User::db()->select('COUNT(1)', Users_User::table())->where($criteria)->limit(1)->execute()->fetch(); if ($row[0] > 0) { throw new Users_Exception_UsernameExists(null, 'username'); } } } return $updated_fields; }
/** * Assigns 'id' and verifies 'username' fields * @method beforeSave * @param {array} $modifiedFields * @return {array} * @throws {Users_Exception_UsernameExists} * If username already exists */ function beforeSave($updatedFields) { if (!$this->retrieved) { if (!isset($updatedFields['id'])) { $this->id = $updatedFields['id'] = self::db()->uniqueId(self::table(), 'id', null, array('filter' => array('Users_User', 'idFilter'))); } if (!isset($updatedFields['username'])) { // put an empty username for now $this->username = $updatedFields['username'] = ''; } } if (!empty($updatedFields['username'])) { $app = Q_Config::expect('Q', 'app'); $unique = Q_Config::get('Users', 'model', $app, 'uniqueUsername', true); if ($unique) { $username = $updatedFields['username']; $criteria = compact('username'); if (isset($this->id)) { $criteria['id != '] = $this->id; } $rows = Users_User::select('COUNT(1)')->where($criteria)->limit(1)->fetchAll(PDO::FETCH_NUM); $row = $rows[0]; if ($row[0] > 0) { throw new Users_Exception_UsernameExists($criteria, 'username'); } } } $user = $this; Q::event('Users/User/save', compact('user', 'updatedFields'), 'before'); return parent::beforeSave($updatedFields); }