mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-15 19:32:40 +01:00
111 lines
2.6 KiB
PHP
111 lines
2.6 KiB
PHP
|
<?php
|
||
|
|
||
|
final class PhabricatorUserCache extends PhabricatorUserDAO {
|
||
|
|
||
|
protected $userPHID;
|
||
|
protected $cacheIndex;
|
||
|
protected $cacheKey;
|
||
|
protected $cacheData;
|
||
|
protected $cacheType;
|
||
|
|
||
|
protected function getConfiguration() {
|
||
|
return array(
|
||
|
self::CONFIG_TIMESTAMPS => false,
|
||
|
self::CONFIG_COLUMN_SCHEMA => array(
|
||
|
'cacheIndex' => 'bytes12',
|
||
|
'cacheKey' => 'text255',
|
||
|
'cacheData' => 'text',
|
||
|
'cacheType' => 'text32',
|
||
|
),
|
||
|
self::CONFIG_KEY_SCHEMA => array(
|
||
|
'key_usercache' => array(
|
||
|
'columns' => array('userPHID', 'cacheIndex'),
|
||
|
'unique' => true,
|
||
|
),
|
||
|
'key_cachekey' => array(
|
||
|
'columns' => array('cacheIndex'),
|
||
|
),
|
||
|
'key_cachetype' => array(
|
||
|
'columns' => array('cacheType'),
|
||
|
),
|
||
|
),
|
||
|
) + parent::getConfiguration();
|
||
|
}
|
||
|
|
||
|
public function save() {
|
||
|
$this->cacheIndex = Filesystem::digestForIndex($this->getCacheKey());
|
||
|
return parent::save();
|
||
|
}
|
||
|
|
||
|
public static function writeCache(
|
||
|
PhabricatorUserCacheType $type,
|
||
|
$key,
|
||
|
$user_phid,
|
||
|
$raw_value) {
|
||
|
|
||
|
if (PhabricatorEnv::isReadOnly()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$table = new self();
|
||
|
$conn_w = $table->establishConnection('w');
|
||
|
|
||
|
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
|
||
|
|
||
|
queryfx(
|
||
|
$conn_w,
|
||
|
'INSERT INTO %T (userPHID, cacheIndex, cacheKey, cacheData, cacheType)
|
||
|
VALUES (%s, %s, %s, %s, %s)
|
||
|
ON DUPLICATE KEY UPDATE cacheData = VALUES(cacheData)',
|
||
|
$table->getTableName(),
|
||
|
$user_phid,
|
||
|
PhabricatorHash::digestForIndex($key),
|
||
|
$key,
|
||
|
$raw_value,
|
||
|
$type->getUserCacheType());
|
||
|
|
||
|
unset($unguarded);
|
||
|
}
|
||
|
|
||
|
public static function clearCache($key, $user_phid) {
|
||
|
if (PhabricatorEnv::isReadOnly()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$table = new self();
|
||
|
$conn_w = $table->establishConnection('w');
|
||
|
|
||
|
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
|
||
|
|
||
|
queryfx(
|
||
|
$conn_w,
|
||
|
'DELETE FROM %T WHERE cacheIndex = %s AND userPHID = %s',
|
||
|
$table->getTableName(),
|
||
|
PhabricatorHash::digestForIndex($key),
|
||
|
$user_phid);
|
||
|
|
||
|
unset($unguarded);
|
||
|
}
|
||
|
|
||
|
|
||
|
public static function clearCacheForAllUsers($key) {
|
||
|
if (PhabricatorEnv::isReadOnly()) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$table = new self();
|
||
|
$conn_w = $table->establishConnection('w');
|
||
|
|
||
|
$unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
|
||
|
|
||
|
queryfx(
|
||
|
$conn_w,
|
||
|
'DELETE FROM %T WHERE cacheIndex = %s',
|
||
|
$table->getTableName(),
|
||
|
PhabricatorHash::digestForIndex($key));
|
||
|
|
||
|
unset($unguarded);
|
||
|
}
|
||
|
|
||
|
}
|