public function getIDs($IDs, $SkipCacheQuery = false)
{
$DatabaseIDs = $IDs;
$Data = [];
if (!$SkipCacheQuery) {
$Keys = [];
// Make keys for cache query
foreach ($IDs as $UserID) {
if (!$UserID) {
continue;
}
$Keys[] = formatString(self::USERID_KEY, ['UserID' => $UserID]);
}
// Query cache layer
$CacheData = Gdn::cache()->get($Keys);
if (!is_array($CacheData)) {
$CacheData = [];
}
foreach ($CacheData as $RealKey => $User) {
if ($User === null) {
$ResultUserID = trim(strrchr($RealKey, '.'), '.');
} else {
$ResultUserID = val('UserID', $User);
}
$this->setCalculatedFields($User);
$Data[$ResultUserID] = $User;
}
//echo "from cache:\n";
//print_r($Data);
$DatabaseIDs = array_diff($DatabaseIDs, array_keys($Data));
unset($CacheData);
}
// Clean out bogus blank entries
$DatabaseIDs = array_diff($DatabaseIDs, [null, '']);
// If we are missing any users from cache query, fill em up here
if (sizeof($DatabaseIDs)) {
$DatabaseData = $this->SQL->whereIn('UserID', $DatabaseIDs)->getWhere('User')->result(DATASET_TYPE_ARRAY);
$DatabaseData = Gdn_DataSet::index($DatabaseData, 'UserID');
//echo "from DB:\n";
//print_r($DatabaseData);
foreach ($DatabaseIDs as $ID) {
if (isset($DatabaseData[$ID])) {
$User = $DatabaseData[$ID];
$this->userCache($User, $ID);
// Apply calculated fields
$this->setCalculatedFields($User);
$Data[$ID] = $User;
} else {
$User = null;
$this->userCache($User, $ID);
}
}
}
$this->EventArguments['RequestedIDs'] = $IDs;
$this->EventArguments['LoadedUsers'] =& $Data;
$this->fireEvent('AfterGetIDs');
return $Data;
}