69 lines
2.3 KiB
PHP
69 lines
2.3 KiB
PHP
<?php
|
|
|
|
namespace okapi\services\users\by_internal_ids;
|
|
|
|
use okapi\Okapi;
|
|
use okapi\Db;
|
|
use okapi\OkapiInternalRequest;
|
|
use okapi\OkapiServiceRunner;
|
|
use okapi\OkapiRequest;
|
|
use okapi\ParamMissing;
|
|
use okapi\InvalidParam;
|
|
use okapi\services\caches\search\SearchAssistant;
|
|
|
|
class WebService
|
|
{
|
|
public static function options()
|
|
{
|
|
return array(
|
|
'min_auth_level' => 1
|
|
);
|
|
}
|
|
|
|
public static function call(OkapiRequest $request)
|
|
{
|
|
$internal_ids = $request->get_parameter('internal_ids');
|
|
if (!$internal_ids) throw new ParamMissing('internal_ids');
|
|
$internal_ids = explode("|", $internal_ids);
|
|
if (count($internal_ids) > 500)
|
|
throw new InvalidParam('internal_ids', "Maximum allowed number of referenced users ".
|
|
"is 500. You provided ".count($internal_ids)." references.");
|
|
$fields = $request->get_parameter('fields');
|
|
if (!$fields)
|
|
throw new ParamMissing('fields');
|
|
|
|
# There's no need to validate the fields parameter as the 'users'
|
|
# method does this (it will raise a proper exception on invalid values).
|
|
|
|
$rs = Db::query("
|
|
select user_id, uuid
|
|
from user
|
|
where user_id in ('".implode("','", array_map('mysql_real_escape_string', $internal_ids))."')
|
|
");
|
|
$internalid2useruuid = array();
|
|
while ($row = mysql_fetch_assoc($rs))
|
|
{
|
|
$internalid2useruuid[$row['user_id']] = $row['uuid'];
|
|
}
|
|
mysql_free_result($rs);
|
|
|
|
# Retrieve data on given user_uuids.
|
|
$id_results = OkapiServiceRunner::call('services/users/users', new OkapiInternalRequest(
|
|
$request->consumer, $request->token, array('user_uuids' => implode("|", array_values($internalid2useruuid)),
|
|
'fields' => $fields)));
|
|
|
|
# Map user_uuids to internal_ids. Also check which internal_ids were not found
|
|
# and mark them with null.
|
|
$results = array();
|
|
foreach ($internal_ids as $internal_id)
|
|
{
|
|
if (!isset($internalid2useruuid[$internal_id]))
|
|
$results[$internal_id] = null;
|
|
else
|
|
$results[$internal_id] = $id_results[$internalid2useruuid[$internal_id]];
|
|
}
|
|
|
|
return Okapi::formatted_response($request, $results);
|
|
}
|
|
}
|