00001 <?php
00002
00016
00017
00018
00019 import('user.User');
00020
00021
00022 define('USER_FIELD_USERID', 'user_id');
00023 define('USER_FIELD_FIRSTNAME', 'first_name');
00024 define('USER_FIELD_LASTNAME', 'last_name');
00025 define('USER_FIELD_USERNAME', 'username');
00026 define('USER_FIELD_EMAIL', 'email');
00027 define('USER_FIELD_URL', 'url');
00028 define('USER_FIELD_INTERESTS', 'interests');
00029 define('USER_FIELD_INITIAL', 'initial');
00030 define('USER_FIELD_NONE', null);
00031
00032 class UserDAO extends DAO {
00039 function &getUser($userId, $allowDisabled = true) {
00040 $result = &$this->retrieve(
00041 'SELECT * FROM users WHERE user_id = ?' . ($allowDisabled?'':' AND disabled = 0'), $userId
00042 );
00043
00044 $user = null;
00045 if ($result->RecordCount() != 0) {
00046 $user = &$this->_returnUserFromRowWithData($result->GetRowAssoc(false));
00047 }
00048 $result->Close();
00049 unset($result);
00050 return $user;
00051 }
00052
00059 function &getUserByUsername($username, $allowDisabled = true) {
00060 $result = &$this->retrieve(
00061 'SELECT * FROM users WHERE username = ?' . ($allowDisabled?'':' AND disabled = 0'), $username
00062 );
00063
00064 $returner = null;
00065 if ($result->RecordCount() != 0) {
00066 $returner = &$this->_returnUserFromRowWithData($result->GetRowAssoc(false));
00067 }
00068 $result->Close();
00069 unset($result);
00070 return $returner;
00071 }
00072
00079 function &getUserByAuthStr($authstr, $allowDisabled = true) {
00080 $result = &$this->retrieve(
00081 'SELECT * FROM users WHERE auth_str = ?' . ($allowDisabled?'':' AND disabled = 0'), $authstr
00082 );
00083
00084 $returner = null;
00085 if ($result->RecordCount() != 0) {
00086 $returner = &$this->_returnUserFromRowWithData($result->GetRowAssoc(false));
00087 }
00088 $result->Close();
00089 unset($result);
00090 return $returner;
00091 }
00092
00099 function &getUserByEmail($email, $allowDisabled = true) {
00100 $result = &$this->retrieve(
00101 'SELECT * FROM users WHERE email = ?' . ($allowDisabled?'':' AND disabled = 0'), $email
00102 );
00103
00104 $returner = null;
00105 if ($result->RecordCount() != 0) {
00106 $returner = &$this->_returnUserFromRowWithData($result->GetRowAssoc(false));
00107 }
00108 $result->Close();
00109 unset($result);
00110 return $returner;
00111 }
00112
00120 function &getUserByCredentials($username, $password, $allowDisabled = true) {
00121 $result = &$this->retrieve(
00122 'SELECT * FROM users WHERE username = ? AND password = ?' . ($allowDisabled?'':' AND disabled = 0'), array($username, $password)
00123 );
00124
00125 $returner = null;
00126 if ($result->RecordCount() != 0) {
00127 $returner = &$this->_returnUserFromRowWithData($result->GetRowAssoc(false));
00128 }
00129 $result->Close();
00130 unset($result);
00131 return $returner;
00132 }
00133
00134 function &_returnUserFromRowWithData(&$row) {
00135 $user =& $this->_returnUserFromRow($row, false);
00136 $this->getDataObjectSettings('user_settings', 'user_id', $row['user_id'], $user);
00137
00138 HookRegistry::call('UserDAO::_returnUserFromRowWithData', array(&$user, &$row));
00139
00140 return $user;
00141 }
00142
00149 function &_returnUserFromRow(&$row, $callHook = true) {
00150 $user = &new User();
00151 $user->setUserId($row['user_id']);
00152 $user->setUsername($row['username']);
00153 $user->setPassword($row['password']);
00154 $user->setSalutation($row['salutation']);
00155 $user->setFirstName($row['first_name']);
00156 $user->setMiddleName($row['middle_name']);
00157 $user->setInitials($row['initials']);
00158 $user->setLastName($row['last_name']);
00159 $user->setGender($row['gender']);
00160 $user->setAffiliation($row['affiliation']);
00161 $user->setEmail($row['email']);
00162 $user->setUrl($row['url']);
00163 $user->setPhone($row['phone']);
00164 $user->setFax($row['fax']);
00165 $user->setMailingAddress($row['mailing_address']);
00166 $user->setCountry($row['country']);
00167 $user->setLocales(isset($row['locales']) && !empty($row['locales']) ? explode(':', $row['locales']) : array());
00168 $user->setDateLastEmail($this->datetimeFromDB($row['date_last_email']));
00169 $user->setDateRegistered($this->datetimeFromDB($row['date_registered']));
00170 $user->setDateValidated($this->datetimeFromDB($row['date_validated']));
00171 $user->setDateLastLogin($this->datetimeFromDB($row['date_last_login']));
00172 $user->setDateEndMembership($this->datetimeFromDB($row['date_end_membership']));
00173 $user->setMustChangePassword($row['must_change_password']);
00174 $user->setDisabled($row['disabled']);
00175 $user->setDisabledReason($row['disabled_reason']);
00176 $user->setAuthId($row['auth_id']);
00177 $user->setAuthStr($row['auth_str']);
00178
00179 if ($callHook) HookRegistry::call('UserDAO::_returnUserFromRow', array(&$user, &$row));
00180
00181 return $user;
00182 }
00183
00188 function insertUser(&$user) {
00189 if ($user->getDateRegistered() == null) {
00190 $user->setDateRegistered(Core::getCurrentDate());
00191 }
00192 if ($user->getDateLastLogin() == null) {
00193 $user->setDateLastLogin(Core::getCurrentDate());
00194 }
00195 $this->update(
00196 sprintf('INSERT INTO users
00197 (username, password, salutation, first_name, middle_name, initials, last_name, gender, affiliation, email, url, phone, fax, mailing_address, country, locales, date_last_email, date_registered, date_validated, date_last_login, date_end_membership, must_change_password, disabled, disabled_reason, auth_id, auth_str)
00198 VALUES
00199 (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, %s, %s, %s, %s, %s, ?, ?, ?, ?, ?)',
00200 $this->datetimeToDB($user->getDateLastEmail()), $this->datetimeToDB($user->getDateRegistered()), $this->datetimeToDB($user->getDateValidated()), $this->datetimeToDB($user->getDateLastLogin()), $this->datetimeToDB($user->getDateEndMembership())),
00201 array(
00202 $user->getUsername(),
00203 $user->getPassword(),
00204 $user->getSalutation(),
00205 $user->getFirstName(),
00206 $user->getMiddleName(),
00207 $user->getInitials(),
00208 $user->getLastName(),
00209 $user->getGender(),
00210 $user->getAffiliation(),
00211 $user->getEmail(),
00212 $user->getUrl(),
00213 $user->getPhone(),
00214 $user->getFax(),
00215 $user->getMailingAddress(),
00216 $user->getCountry(),
00217 join(':', $user->getLocales()),
00218 $user->getMustChangePassword(),
00219 $user->getDisabled() ? 1 : 0,
00220 $user->getDisabledReason(),
00221 $user->getAuthId(),
00222 $user->getAuthStr()
00223 )
00224 );
00225
00226 $user->setUserId($this->getInsertUserId());
00227 $this->updateLocaleFields($user);
00228 return $user->getUserId();
00229 }
00230
00231 function getLocaleFieldNames() {
00232 return array('biography', 'signature', 'interests');
00233 }
00234
00235 function updateLocaleFields(&$user) {
00236 $this->updateDataObjectSettings('user_settings', $user, array(
00237 'user_id' => $user->getUserId()
00238 ));
00239 }
00240
00245 function updateUser(&$user) {
00246 if ($user->getDateLastLogin() == null) {
00247 $user->setDateLastLogin(Core::getCurrentDate());
00248 }
00249
00250 $this->updateLocaleFields($user);
00251
00252 return $this->update(
00253 sprintf('UPDATE users
00254 SET
00255 username = ?,
00256 password = ?,
00257 salutation = ?,
00258 first_name = ?,
00259 middle_name = ?,
00260 initials = ?,
00261 last_name = ?,
00262 gender = ?,
00263 affiliation = ?,
00264 email = ?,
00265 url = ?,
00266 phone = ?,
00267 fax = ?,
00268 mailing_address = ?,
00269 country = ?,
00270 locales = ?,
00271 date_last_email = %s,
00272 date_validated = %s,
00273 date_last_login = %s,
00274 date_end_membership = %s,
00275 must_change_password = ?,
00276 disabled = ?,
00277 disabled_reason = ?,
00278 auth_id = ?,
00279 auth_str = ?
00280 WHERE user_id = ?',
00281 $this->datetimeToDB($user->getDateLastEmail()), $this->datetimeToDB($user->getDateValidated()), $this->datetimeToDB($user->getDateLastLogin()), $this->dateToDB($user->getDateEndMembership())),
00282 array(
00283 $user->getUsername(),
00284 $user->getPassword(),
00285 $user->getSalutation(),
00286 $user->getFirstName(),
00287 $user->getMiddleName(),
00288 $user->getInitials(),
00289 $user->getLastName(),
00290 $user->getGender(),
00291 $user->getAffiliation(),
00292 $user->getEmail(),
00293 $user->getUrl(),
00294 $user->getPhone(),
00295 $user->getFax(),
00296 $user->getMailingAddress(),
00297 $user->getCountry(),
00298 join(':', $user->getLocales()),
00299 $user->getMustChangePassword(),
00300 $user->getDisabled()?1:0,
00301 $user->getDisabledReason(),
00302 $user->getAuthId(),
00303 $user->getAuthStr(),
00304 $user->getUserId(),
00305 )
00306 );
00307 }
00308
00314 function renewMembership(&$user){
00315 $dateEnd = ($user->getDateEndMembership())?strtotime($user->getDateEndMembership()):0;
00316
00317
00318 $time = time();
00319 if ($dateEnd < $time ) $dateEnd = $time;
00320
00321 $user->setDateEndMembership(mktime(23, 59, 59, date("m", $dateEnd), date("d", $dateEnd), date("Y", $dateEnd)+1));
00322 $this->updateUser($user);
00323 }
00324
00329 function deleteUser(&$user) {
00330 return $this->deleteUserById($user->getUserId());
00331 }
00332
00337 function deleteUserById($userId) {
00338 $this->update('DELETE FROM user_settings WHERE user_id = ?', $userId);
00339 return $this->update('DELETE FROM users WHERE user_id = ?', $userId);
00340 }
00341
00348 function getUserFullName($userId, $allowDisabled = true) {
00349 $result = &$this->retrieve(
00350 'SELECT first_name, middle_name, last_name FROM users WHERE user_id = ?' . ($allowDisabled?'':' AND disabled = 0'),
00351 $userId
00352 );
00353
00354 if($result->RecordCount() == 0) {
00355 $returner = false;
00356 } else {
00357 $returner = $result->fields[0] . ' ' . (empty($result->fields[1]) ? '' : $result->fields[1] . ' ') . $result->fields[2];
00358 }
00359
00360 $result->Close();
00361 unset($result);
00362
00363 return $returner;
00364 }
00365
00372 function getUserEmail($userId, $allowDisabled = true) {
00373 $result = &$this->retrieve(
00374 'SELECT email FROM users WHERE user_id = ?' . ($allowDisabled?'':' AND disabled = 0'),
00375 $userId
00376 );
00377
00378 if($result->RecordCount() == 0) {
00379 $returner = false;
00380 } else {
00381 $returner = $result->fields[0];
00382 }
00383
00384 $result->Close();
00385 unset($result);
00386
00387 return $returner;
00388 }
00389
00400 function &getUsersByField($field = USER_FIELD_NONE, $match = null, $value = null, $allowDisabled = true, $dbResultRange = null) {
00401 $sql = 'SELECT * FROM users u';
00402 switch ($field) {
00403 case USER_FIELD_USERID:
00404 $sql .= ' WHERE u.user_id = ?';
00405 $var = $value;
00406 break;
00407 case USER_FIELD_USERNAME:
00408 $sql .= ' WHERE LOWER(u.username) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00409 $var = $match == 'is' ? $value : "%$value%";
00410 break;
00411 case USER_FIELD_INITIAL:
00412 $sql .= ' WHERE LOWER(u.last_name) LIKE LOWER(?)';
00413 $var = "$value%";
00414 break;
00415 case USER_FIELD_INTERESTS:
00416 $sql .= ', user_settings us WHERE us.user_id = u.user_id AND u.setting_name = \'interests\' AND LOWER(us.setting_value) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00417 $var = $match == 'is' ? $value : "%$value%";
00418 break;
00419 case USER_FIELD_EMAIL:
00420 $sql .= ' WHERE LOWER(u.email) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00421 $var = $match == 'is' ? $value : "%$value%";
00422 break;
00423 case USER_FIELD_URL:
00424 $sql .= ' WHERE LOWER(u.url) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00425 $var = $match == 'is' ? $value : "%$value%";
00426 break;
00427 case USER_FIELD_FIRSTNAME:
00428 $sql .= ' WHERE LOWER(u.first_name) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00429 $var = $match == 'is' ? $value : "%$value%";
00430 break;
00431 case USER_FIELD_LASTNAME:
00432 $sql .= ' WHERE LOWER(u.last_name) ' . ($match == 'is' ? '=' : 'LIKE') . ' LOWER(?)';
00433 $var = $match == 'is' ? $value : "%$value%";
00434 break;
00435 }
00436
00437 $orderSql = ' ORDER BY u.last_name, u.first_name';
00438
00439 if ($field != USER_FIELD_NONE) $result = &$this->retrieveRange($sql . ($allowDisabled?'':' AND u.disabled = 0') . $orderSql, $var, $dbResultRange);
00440 else $result = &$this->retrieveRange($sql . ($allowDisabled?'':' WHERE u.disabled = 0') . $orderSql, false, $dbResultRange);
00441
00442 $returner = &new DAOResultFactory($result, $this, '_returnUserFromRowWithData');
00443 return $returner;
00444 }
00445
00452 function userExistsById($userId, $allowDisabled = true) {
00453 $result = &$this->retrieve(
00454 'SELECT COUNT(*) FROM users WHERE user_id = ?' . ($allowDisabled?'':' AND disabled = 0'), $userId
00455 );
00456 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
00457
00458 $result->Close();
00459 unset($result);
00460
00461 return $returner;
00462 }
00463
00471 function userExistsByUsername($username, $userId = null, $allowDisabled = true) {
00472 $result = &$this->retrieve(
00473 'SELECT COUNT(*) FROM users WHERE username = ?' . (isset($userId) ? ' AND user_id != ?' : '') . ($allowDisabled?'':' AND disabled = 0'),
00474 isset($userId) ? array($username, $userId) : $username
00475 );
00476 $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
00477
00478 $result->Close();
00479 unset($result);
00480
00481 return $returner;
00482 }
00483
00491 function userExistsByEmail($email, $userId = null, $allowDisabled = true) {
00492 $result = &$this->retrieve(
00493 'SELECT COUNT(*) FROM users WHERE email = ?' . (isset($userId) ? ' AND user_id != ?' : '') . ($allowDisabled?'':' AND disabled = 0'),
00494 isset($userId) ? array($email, $userId) : $email
00495 );
00496 $returner = isset($result->fields[0]) && $result->fields[0] == 1 ? true : false;
00497
00498 $result->Close();
00499 unset($result);
00500
00501 return $returner;
00502 }
00503
00508 function getInsertUserId() {
00509 return $this->getInsertId('users', 'user_id');
00510 }
00511 }
00512
00513 ?>