00001 <?php
00002
00016
00017
00018
00019 import('security.AccessKey');
00020
00021 class AccessKeyDAO extends DAO {
00027 function &getAccessKey($accessKeyId) {
00028 $result = &$this->retrieve(
00029 sprintf(
00030 'SELECT * FROM access_keys WHERE access_key_id = ? AND expiry_date > %s',
00031 $this->datetimeToDB(Core::getCurrentDate())
00032 ),
00033 $accessKeyId
00034 );
00035
00036 $accessKey = null;
00037 if ($result->RecordCount() != 0) {
00038 $accessKey = &$this->_returnAccessKeyFromRow($result->GetRowAssoc(false));
00039 }
00040 $result->Close();
00041 unset($result);
00042 return $accessKey;
00043 }
00044
00052 function &getAccessKeyByKeyHash($context, $userId, $keyHash, $assocId = null) {
00053 $paramArray = array($context, $keyHash, $userId);
00054 if (isset($assocId)) $paramArray[] = $assocId;
00055 $result = &$this->retrieve(
00056 sprintf(
00057 'SELECT * FROM access_keys WHERE context = ? AND key_hash = ? AND user_id = ? AND expiry_date > %s' . (isset($assocId)?' AND assoc_id = ?':''),
00058 $this->datetimeToDB(Core::getCurrentDate())
00059 ),
00060 $paramArray
00061 );
00062
00063 $returner = null;
00064 if ($result->RecordCount() != 0) {
00065 $returner = &$this->_returnAccessKeyFromRow($result->GetRowAssoc(false));
00066 }
00067 $result->Close();
00068 unset($result);
00069 return $returner;
00070 }
00071
00077 function &_returnAccessKeyFromRow(&$row) {
00078 $accessKey = &new AccessKey();
00079 $accessKey->setAccessKeyId($row['access_key_id']);
00080 $accessKey->setKeyHash($row['key_hash']);
00081 $accessKey->setExpiryDate($this->datetimeFromDB($row['expiry_date']));
00082 $accessKey->setContext($row['context']);
00083 $accessKey->setAssocId($row['assoc_id']);
00084 $accessKey->setUserId($row['user_id']);
00085
00086 HookRegistry::call('AccessKeyDAO::_returnAccessKeyFromRow', array(&$accessKey, &$row));
00087
00088 return $accessKey;
00089 }
00090
00095 function insertAccessKey(&$accessKey) {
00096 $this->update(
00097 sprintf('INSERT INTO access_keys
00098 (key_hash, expiry_date, context, assoc_id, user_id)
00099 VALUES
00100 (?, %s, ?, ?, ?)',
00101 $this->datetimeToDB($accessKey->getExpiryDate())),
00102 array(
00103 $accessKey->getKeyHash(),
00104 $accessKey->getContext(),
00105 $accessKey->getAssocId(),
00106 $accessKey->getUserId()
00107 )
00108 );
00109
00110 $accessKey->setAccessKeyId($this->getInsertAccessKeyId());
00111 return $accessKey->getAccessKeyId();
00112 }
00113
00118 function updateAccessKey(&$accessKey) {
00119 return $this->update(
00120 sprintf('UPDATE accessKeys
00121 SET
00122 key_hash = ?,
00123 expiry_date = %s,
00124 context = ?,
00125 assoc_id = ?,
00126 user_id = ?
00127 WHERE access_key_id = ?',
00128 $this->datetimeToDB($accessKey->getExpiryDate())),
00129 array(
00130 $accessKey->getKeyHash(),
00131 $accessKey->getContext(),
00132 $accessKey->getAssocId(),
00133 $accessKey->getUserId(),
00134 $accessKey->getAccessKeyId()
00135 )
00136 );
00137 }
00138
00143 function deleteAccessKey(&$accessKey) {
00144 return $this->deleteAccessKeyById($accessKey->getAccessKeyId());
00145 }
00146
00151 function deleteAccessKeyById($accessKeyId) {
00152 return $this->update(
00153 'DELETE FROM access_keys WHERE access_key_id = ?', $accessKeyId
00154 );
00155 }
00156
00162 function transferAccessKeys($oldUserId, $newUserId) {
00163 return $this->update(
00164 'UPDATE access_keys SET user_id = ? WHERE user_id = ?',
00165 array($newUserId, $oldUserId)
00166 );
00167 }
00168
00172 function deleteExpiredKeys() {
00173 return $this->update(
00174 sprintf(
00175 'DELETE FROM access_keys WHERE expiry_date <= %s',
00176 $this->datetimeToDB(Core::getCurrentDate())
00177 )
00178 );
00179 }
00180
00185 function getInsertAccessKeyId() {
00186 return $this->getInsertId('access_keys', 'access_key_id');
00187 }
00188 }
00189
00190 ?>